最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

程序遷移到swift 3.0的一些實用技巧

 更新時間:2017年03月13日 09:19:47   作者:Mellong  
Swift項目為適配iOS10,無奈只能更新Xcode 8 ,可是發(fā)現(xiàn)一入3.0深似海,從此幸福是路人。于是邊摸索邊修改,終于完成了代碼遷移。節(jié)后在完成手頭工作后,整理思路把Swift3.0遷移的一些實用技巧分享大家,需要的朋友可以參考下。

前言

在去年swift3.0發(fā)布了,新版本可以在Xcode 8中使用了,或者你可以直接從swift.org下載編譯器。

從代碼可讀性來看,新版本有很多提升,函數(shù)調用的連續(xù)性,更好的命名約定和移除了部分c風格的元素。

從代碼可讀性來來看,NS前綴已經(jīng)從Foundation類型中移除,例如NSBundle.mainBundle()現(xiàn)在改為Bundle.mainBundle() .

c風格的一元操作符++和--在3.0中已經(jīng)不適用了:

// Only in Swift 2.2 and earlier
var number = 10 
number++ 
++number
number-- 
--number

相對應的表達方式是number += 1 or number -= 1.

另外一個有趣的變化是移除了c風格的for-loop,我記得在學校中(使用c語言)寫這種循環(huán):

// Only in Swift 2.2 and earlier
let steps = 5 
for var step = 0; step < steps; step++ { 
 print(step)
}
// 0 1 2 3 4

主要的原因是存在了更好的對應寫循環(huán)的方法for-instride().for-loop在理解上比較困難和缺少swift風格。當新的方法出現(xiàn)后,for-loop已經(jīng)很少在代碼庫中使用了。

這篇文章將講解典型的for-loop使用場景,同時說明遷移到 for-in, stride()或者簡單的while() {} .

一、如何遷移 for-loop 到 for-in

for-loop 應用的典型場景在一個數(shù)字區(qū)間內(nèi)迭代。這些數(shù)字可以是數(shù)組的索引等.

例如,讓我們遍歷數(shù)組的每一個元素:

// Only in Swift 2.3 and earlier
let birds = ["pigeon", "sparrow", "titmouse"] 
for var index = 0; index < birds.count; index++ { 
 print(birds[index])
}
// "pigeon" "sparrow" "titmouse"

可見,let index = 0; index < birds.count; index++ 的循環(huán)部分是冗長的。許多元素是多余的,整個表達式可以簡化的。替換為手動的增量,整個操作可以用更具表達性的語法來自動化。

for-in 循環(huán)更簡短和更具表達性。讓我們遷移上面的代碼:

let birds = ['pigeon', 'sparrow', 'titmouse'] 
for index in 0..<birds.count { 
 print(birds[index])
}
// 'pigeon', 'sparrow', 'titmouse'

現(xiàn)在感覺好很多了。index in 0..<birds.count 更容易閱讀和理解。0..<birds.count 這部分定義一個半開區(qū)間的 Range 類型。for-in 循環(huán)迭代0,1和2的范圍值(不包括上限3)。

這不是全部! 你甚至可以跳過索引并直接訪問數(shù)組元素:

let birds = ["pigeon", "sparrow", "titmouse"] 
for bird in birds { 
 print(bird)
}
// "pigeon" "sparrow" "titmouse"

可以看出,對于標準數(shù)組或集合迭代for-in對于for-loop是一個更好的替代。 至少在這種情況下,在Swift 3.0中刪除for-loop的決定是合理的。

二、如何遷移 for-loop 到 stride

你可以合理地要求for-loop雖然是冗長的,但仍然是靈活的。 它對于更復雜的迭代是有用的。

讓我們嘗試一個場景。你要打印一個具有奇數(shù)索引元素的元素數(shù)組。一個 for-loop 可能看起來像這樣:

// Only in Swift 2.3 and earlier
let colors = ["blue", "green", "red", "white", "black"] 
for var index = 0; index < colors.count; index += 2 { 
 print(colors[index])
}
// => "blue" "red" "black"

由于索引根據(jù)表達式 index += 2而每次增加2,所以只有奇數(shù)索引的元素會被顯示:”blue”, “red” and “black”.

你可以嘗試使用 for-in 并定義一個范圍。但是需要奇數(shù)索引加上附加的驗證:

let colors = ["blue", "green", "red", "white", "black"] 
for index in 0..<colors.count { 
 if (index % 2 == 0) {
 print(colors[index])
 }
}
// => "blue" "red" "black"

的確, if (index % 2 == 0) { ... } 條件句在這里看起來怎么樣。

這種情況很符合使用 Swift 的stride(from: value, to: value, by: value)函數(shù)。定義開始,結束(不包括上限)和步長值,函數(shù)返回相應的數(shù)字序列。

讓我們在我們的場景中應用stride:

let colors = ["blue", "green", "red", "white", "black"] 
for index in stride(from: 0, to: colors.count, by: 2) { 
 print(colors[index])
}
// => "blue" "red" "black"

stride(from: 0, to: colors.count, by: 2) 返回以0開始到5的數(shù)字(上限不包含5),步長為2。對于 for-loop,這是一個好的替代。

如果上限必須包含進來,這里有另外一種函數(shù)格式:

stride(from: value, through: value, by: value) 。第二個參數(shù)的標簽是 through, 這個標簽是用以指明是包含上限的。

三、其他情況堅持使用while

c風格for-loop的每個組件都有一個很好的屬性:初始化,跳出嚴重和完全可配置的增量:

for <initialization>; <verification>; <increment> { 
 // loop body
}

此外,你可以省略其中的任何組件,要是你能在for-loop的循環(huán)塊打破循環(huán)。

例如,讓我們打印一個數(shù)字數(shù)組的元素,直到數(shù)字0被遇到??梢允褂肅風格的for-loop:

// Only in Swift 2.2 and earlier
let numbers = [1, 6, 2, 0, 7], nCount = numbers.count 
for var index = 0; index < nCount && numbers[index] != 0; index++ { 
 print(numbers[index])
}
// => 1 6 2

驗證部分 index < nCount && numbers[index] != 0 是用以檢查是否0在數(shù)組中出現(xiàn)。如果出現(xiàn),則跳出循環(huán)。

所以只有0之前的數(shù)字被打印出來:1,6和2。

for var index in 0..<nCount 是一個遷移選項。你只是需要使用條件 if numbers[index] == 0 ,當0出現(xiàn)的時候跳出循環(huán):

let numbers = [1, 6, 2, 0, 7], nCount = numbers.count 
for index in 0..<nCount { 
 if (numbers[index] == 0) {
 break
 }
 print(numbers[index])
}
// => 1 6 2

但 break 語句出現(xiàn),它會輕微減少閱讀流程。但是我想要容易地閱讀代碼流程!

while(<condition>) {...} 循環(huán)可能是一個更好的替代方案。讓我們看看上一個例子是如果被修改的:

let numbers = [1, 6, 2, 0, 7], nCount = numbers.count 
var index = 0 
while (index < nCount && numbers[index] != 0) { 
 print(numbers[index])
 index += 1
}
// => 1 6 2

如果你有的情況無法使用 for-in 或者 stride() , 那么我推薦你使用 while(){}

四、統(tǒng)一參數(shù)標簽行為

在Swift 2.2 和更早版本你可以在調用函數(shù)的時候忽略第一個參數(shù)的標簽:

// Only in Swift 2.2 and earlier
func sum(firstItem: Int, secondItem: Int) -> Int { 
 return firstItem + secondItem
}
sum(5, secondItem: 2) // => 7

對于我來說,這個忽略的做法給我?guī)砝_。你不得不忽略第一個參數(shù)的標簽,然而剩下的參數(shù)卻還保持有標簽。這是一種不自然的規(guī)則。

幸運的是從3.0版本開始,所有參數(shù)將強制擁有標簽。

讓我們來遷移上一個例子:

func sum(firstItem: Int, secondItem: Int) -> Int { 
 return firstItem + secondItem
}
sum(firstItem: 5, secondItem: 2) // => 7

myFun(firstParam: 1, secondParam: 2)看起來更好。你知道嚴格的參數(shù)含義。簡單,一致和清晰的方式。

如果你因為某些原因想在Swift 3.0中調用函數(shù)的時候忽略第一個標簽,使用_ 作為那個參數(shù)的參數(shù)標簽:

func sum(_ firstItem: Int, secondItem: Int) -> Int { 
 return firstItem + secondItem
}
sum(5, secondItem: 2) // => 7

然而從長遠來看我不推薦這種做法。他破壞了Swift代碼中函數(shù)/方法調用的一致性。

Swift 命名向導 有很多有用的命名方面的建議。

總結

Swift 3.0 做了一個很好的修改列表。其中大部分是重大的修改,所以你必須花些功夫來遷移Swift 2.3或者更舊的代碼。

Swift 的制造者花了很多功夫來使這門語言用起來盡可能的舒服。

有時候,這個過程產(chǎn)生重大更改。幸運的是相比提高代碼的可讀性和跨語言語法的一致性來說,這是一個相對小的代價。

C風格的元素如for-loop,一元增量和減量運算被刪除。對于這些結構Swift提供了更好的選擇。

例如C語言風格的for循環(huán)很容易由for-in所取代。你可以使用stride()函數(shù)來進行更多可配置的迭代。

我最喜歡的改進是Swift 3.0引入了函數(shù)參數(shù)標簽的一致性和清晰度。

簡單易記的規(guī)則:始終指明參數(shù)的標簽。

我建議你也訪問Swift 3.0官方的遷移向導。

英文原文鏈接:https://rainsoft.io/useful-tips-for-migrating-to-swift-3-0/

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者使用Swift能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • swift控件工廠類的實現(xiàn)代碼

    swift控件工廠類的實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了swift控件工廠類的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • 深入解析Swift編程中枚舉類型的相關使用

    深入解析Swift編程中枚舉類型的相關使用

    這篇文章主要介紹了Swift編程中枚舉類型的相關使用,是Swift入門學習中的基礎知識,需要的朋友可以參考下
    2015-11-11
  • Swift繼承Inheritance淺析介紹

    Swift繼承Inheritance淺析介紹

    繼承我們可以理解為一個類獲取了另外一個類的方法和屬性。當一個類繼承其它類時,繼承類叫子類,被繼承類叫超類(或父類),在Swift中,類可以調用和訪問超類的方法,屬性和下標腳本,并且可以重寫它們。我們也可以為類中繼承來的屬性添加屬性觀察器
    2022-08-08
  • swift5.3 UIColor使用十六進制顏色的方法實例

    swift5.3 UIColor使用十六進制顏色的方法實例

    這篇文章主要給大家介紹了關于swift5.3 UIColor使用十六進制顏色的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 用SwiftUI實現(xiàn)3D Scroll滾動效果的實現(xiàn)代碼

    用SwiftUI實現(xiàn)3D Scroll滾動效果的實現(xiàn)代碼

    這篇文章主要介紹了用SwiftUI實現(xiàn)3D Scroll效果的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習
    2020-04-04
  • Swift教程之屬性詳解

    Swift教程之屬性詳解

    這篇文章主要介紹了Swift教程之屬性詳解,屬性是描述特定類、結構或者枚舉的值,計算屬性存在于類、結構與枚舉中,存儲屬性僅僅只在類與結構中,需要的朋友可以參考下
    2015-01-01
  • Swift Access Control訪問控制與斷言詳細介紹

    Swift Access Control訪問控制與斷言詳細介紹

    這篇文章主要介紹了Swift Access Control訪問控制與斷言,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-09-09
  • swift相冊相機的權限處理示例詳解

    swift相冊相機的權限處理示例詳解

    在iOS7以后要打開手機攝像頭或者相冊的話都需要權限,在iOS9中更是更新了相冊相關api的調用,那么下面這篇文章主要給大家介紹了關于swift相冊相機權限處理的相關資料,文中給出了詳細的示例代碼,需要的朋友可以參考下。
    2017-10-10
  • swift如何利用系統(tǒng)庫將漢字轉換為拼音詳解

    swift如何利用系統(tǒng)庫將漢字轉換為拼音詳解

    將漢字轉換為拼音更利于我們大家開發(fā)搜索功能,所以這篇文章主要給大家介紹了關于swift如何利用系統(tǒng)庫將漢字轉換為拼音的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • Swift源碼解析之弱引用

    Swift源碼解析之弱引用

    這篇文章主要給大家介紹了關于Swift源碼解析之弱引用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03

最新評論

阳西县| 昌乐县| 宣武区| 东源县| 宜昌市| 余干县| 郯城县| 宁南县| 宁国市| 彝良县| 南充市| 崇左市| 双牌县| 建始县| 冷水江市| 怀集县| 宝坻区| 平度市| 荔浦县| 仲巴县| 平定县| 阿拉尔市| 威远县| 华亭县| 岳阳市| 桂阳县| 连城县| 茂名市| 康保县| 盐津县| 平阳县| 景泰县| 板桥市| 疏附县| 大方县| 沂水县| 秀山| 桐城市| 商都县| 揭西县| 拉萨市|