亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Swift > 正文

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

2020-03-09 17:46:14
字體:
供稿:網(wǎng)友

前言

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

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

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

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

// Only in Swift 2.2 and earliervar number = 10 number++ ++numbernumber-- --number

相對應(yīng)的表達方式是number += 1 or number -= 1.

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

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

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

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

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

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

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

// Only in Swift 2.3 and earlierlet 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)部分是冗長的。許多元素是多余的,整個表達式可以簡化的。替換為手動的增量,整個操作可以用更具表達性的語法來自動化。

swift3,遷移,swift3.0遷移,swift2.3遷移swift3.0

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雖然是冗長的,但仍然是靈活的。 它對于更復(fù)雜的迭代是有用的。

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

// Only in Swift 2.3 and earlierlet 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ù)。定義開始,結(jié)束(不包括上限)和步長值,函數(shù)返回相應(yīng)的數(shù)字序列。

讓我們在我們的場景中應(yīng)用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風(fēng)格for-loop的每個組件都有一個很好的屬性:初始化,跳出嚴重和完全可配置的增量:

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

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

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

// Only in Swift 2.2 and earlierlet 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 和更早版本你可以在調(diào)用函數(shù)的時候忽略第一個參數(shù)的標簽:

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

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

swift3,遷移,swift3.0遷移,swift2.3遷移swift3.0

幸運的是從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中調(diào)用函數(shù)的時候忽略第一個標簽,使用_ 作為那個參數(shù)的參數(shù)標簽:

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

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

Swift 命名向?qū)?有很多有用的命名方面的建議。

總結(jié)

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

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

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

C風(fēng)格的元素如for-loop,一元增量和減量運算被刪除。對于這些結(jié)構(gòu)Swift提供了更好的選擇。

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

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

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

我建議你也訪問Swift 3.0官方的遷移向?qū)А?/p>

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

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


注:相關(guān)教程知識閱讀請移步到swift教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
www.亚洲色图.com| 网址你懂得在线观看| 无码熟妇人妻av| 久久aⅴ国产欧美74aaa| 久久久久亚洲av成人片| 亚洲久久久久久| 中文高清一区| 伊人色综合一区二区三区影院视频| 久久久久久久999| 欧美色网址大全| 日日噜噜夜夜狠狠视频欧美人| 精品一区免费| 日韩精品中文字幕一区二区三区| 国产成人一区二区三区免费看| 欧美在线看片a免费观看| 爱爱爱免费视频在线观看| 91精品福利在线一区二区三区| 尤物在线精品视频| 中文字幕97| 在线一区免费| 秋霞精品一区二区三区| a级高清视频欧美日韩| 欧美黑人巨大精品一区二区| 欧美三级免费观看| 国产欧美日韩免费看aⅴ视频| 中国a一片一级一片| 91久久久久久久久久久久久久| 欧美精品久久久| 九九热这里只有在线精品视| 欧美三级电影网站| 99国产精品久久久久| 免费在线看污| 99久久综合狠狠综合久久| 久久久精品国产亚洲| 欧美日韩调教| 国产午夜精品一区二区| 2020国产精品久久精品美国| 影音先锋男人在线资源| 91精品久久久久久久久99蜜臂| 性色av一区二区三区红粉影视| 天天色综合6| 欧美高清视频看片在线观看| 99蜜桃臀久久久欧美精品网站| 国产成人亚洲精品乱码在线观看| 久久久免费人体| 国产91久久久久蜜臀青青天草二| 日韩av毛片在线观看| 国产精品天干天干在观线| 日本不卡视频| 欧美一区二区三区在| 欧美日韩电影一区二区| 国产专区中文字幕| jlzzjlzz亚洲女人| 午夜av免费在线观看| 最新黄色片网站| 欧美日韩综合色| 亚洲综合一区二区三区| 国产日韩欧美在线播放| 日韩在线免费av| gai在线观看免费高清| 一级毛片免费视频| 日av在线不卡| 欧美日韩网站| 日韩成人动漫在线观看| 极品日韩av| 鲁一鲁一鲁一鲁一av| 大香伊人久久精品一区二区| 97国产精品久久久| 草草视频在线一区二区| 伊人精品成人久久综合软件| 欧美一区二区三区四| 日本在线不卡视频一二三区| 久久午夜色播影院免费高清| 在线成人私人影院| 亚洲无线码一区二区三区| 成年人视频网址| 在线观看成人毛片| 你懂的一区二区| 又骚又黄的视频| 日韩人妻无码一区二区三区| 欧美成人精品在线视频| 久久91超碰青草在哪里看| 日本少妇xxx| 亚洲尤物在线| 欧美成人剧情片在线观看| 在线电影一区二区三区| 国产精品30p| 欧美日韩亚洲三区| 精品中文字幕久久久久久| 中文字幕一区二区三区四区在线视频| 中文字幕一区二区三区有限公司| 国产精品综合一区二区| 黑人巨大精品欧美一区二区奶水| 青青草伊人久久| 久久精品国产久精国产一老狼| 国产一级精品毛片| 国产精品免费人成网站酒店| 美女视频免费一区| 青青草视频导航| 久久久久国产成人精品亚洲午夜| 久久手机精品视频| 在线观看亚洲精品福利片| 欧美人妻一区二区三区| 理论在线观看| 成人h动漫精品一区二区器材| 国产一二区在线观看| 一区不卡字幕| 99re在线视频这里只有精品| 国产精品第一区| 亚洲性感美女99在线| 久久三级毛片| 日本sm极度另类视频| 日本 国产 欧美色综合| 亚洲自拍偷拍一区二区三区| 91亚洲永久免费精品| 日本在线免费观看视频| 一分钟免费观看视频播放www| 女同性恋一区二区| 成人性生交大片免费看在线播放| www.狠狠艹| 欧美一区二区三区系列电影| 国产精品无码久久久久| 91九色丨porny丨极品女神| 丁香激情视频| 9191精品国产综合久久久久久| 四虎海外永久免费网址| 国产成人手机在线| 精品一区久久久久久| 欧美人与动牲性行为| www.精品| 欧美日韩理论| 轻轻草成人在线| 美腿丝袜一区二区三区| 久草综合在线观看| 国产99999| 飘雪影视在线观看免费观看| 日本福利午夜视频在线| 三级av免费看| 国产精品久久麻豆| 婷婷激情5月天| 欧美成人女星排行榜| 久久亚洲不卡| 久久久久88色偷偷免费| 国产精品亚洲第一区在线暖暖韩国| 欧美在线中文字幕高清的| 黄色美女久久久| 久久久久久中文字幕| 激情文学综合丁香| 欧美成人精品一区二区综合免费| 久久久久久毛片| 欧美性猛交xxxx偷拍洗澡| 久久精品a一级国产免视看成人| 欧美黄色一级片视频| 午夜久久中文| 国产清纯美女被跳蛋高潮一区二区久久w| 欧美午夜精品久久久久久孕妇| 国产精品嫩草99av在线| 在线亚洲日本| av免费观看网站| 精品亚洲国产成av人片传媒| 亚洲国产专区| 日日狠狠久久偷偷四色综合免费| 日韩视频一区二区三区| 91九色蝌蚪porny| 视频一区欧美精品| 女女百合国产免费网站| 国产免费色视频| 久久久精品一区二区毛片免费看| 欧美一级黑人aaaaaaa做受| 一本大道色婷婷在线| 久久综合色综合| 99久久99久久综合| 精品国产老师黑色丝袜高跟鞋| 亚洲精品77777| 99精品视频一区二区三区| 国产精品一级无码| 精品国产一区二区国模嫣然| 欧美性狂猛xxxxxbbbbb| 可以免费观看av毛片| 久久视频在线观看中文字幕| 91豆花视频在线播放| 欧美精品久久久久久久久| 黄色影片网址| 91久久精品在线| www污污在线| 日韩精品导航| 高清一区二区三区日本久| 性高湖久久久久久久久| 国产aⅴ激情无码久久久无码| 国产精品九九九九九九| 在线男人天堂| 亚洲一区二区91| 午夜精品一区二区三区免费视频| 国产午夜福利片| 国自在线精品视频| 亚洲国产精品精华液ab| 热久久99这里有精品| 日韩精品亚洲精品| 上原亚衣av一区二区三区| 国产精品久久久久久久久久久不卡| 最新天堂中文在线| 国产69久久| 亚洲成人一区二区三区| 91青青草免费在线看| 美女久久久久| 亚洲精品福利电影| 三上悠亚av一区二区三区| 成人免费网站在线观看视频| 国产视频在线一区二区| 久久精品av| 三级外国片在线观看视频| 6699久久国产精品免费| 黄色在线免费观看| 精品欧美日韩在线| 亚洲自拍偷拍精品| 亚洲成人av片在线观看| 国产日产精品一区二区三区的介绍| 一区二区三区免费| 亚洲国产精品久久久久婷婷884| 国产激情久久| www亚洲天堂| 制服丝袜av成人在线看| av网站在线免费看推荐| 亚洲精品国精品久久99热一| av不卡在线免费观看| 国产尤物在线观看| 国产人成精品一区二区三| 欧美色网站导航| 91精品一区国产高清在线gif| 91久久国产综合久久91猫猫| 亚洲国产aⅴ天堂久久| 午夜精品一区二区三区免费视频| 欧美一区二区三区四区视频| 日韩高清在线电影| 清纯唯美亚洲经典中文字幕| 欧美国产一区二区三区激情无套| eeuss国产一区二区三区| 国产成人精品一区二区三区四区| 污污视频网站免费观看| 熟妇人妻中文av无码| 亚洲精品水蜜桃| 国产精品久久久久无码av| 四虎精品成人a在线观看| av网站在线不卡| 中文无码精品一区二区三区| 国产区日韩欧美| 成人深夜福利app| 国产999精品久久久| 中文字幕欧美日韩va免费视频| 亚洲综合小说| 国产在线不卡av| 国内精品视频666| 五月婷婷另类国产| 国产又粗又黄又爽视频| 亚洲国产综合av| 国产一二区在线| 色狠狠久久av综合| 日韩成人a**站| 成人国产精品免费观看| 在线不卡日本| 欧美日韩亚洲第一页| 国产探花精品一区二区| 美女啪啪无遮挡免费久久网站| 国产熟女一区二区三区四区| 精品无码国模私拍视频| 日韩少妇裸体做爰视频| 亚洲新声在线观看| 亚洲高清免费观看高清完整版在线观看| 免费在线观看成人| 视频在线观看你懂的| 韩国成人福利片在线播放| 91在线视频播放| 国产欧美一区二区三区视频在线观看| 日本人妖一区二区| 99久久综合狠狠综合久久止| 希岛爱理av一区二区三区| 国产伦精品一区二区三区免.费| 国产精品成人69xxx免费视频| 国产在线综合网| 色影视在线视频资源站| 在线免费日韩| 亚洲嫩模一区| 欧美最猛黑人xxxx黑人猛交3p| 正在播放91九色| 欧美视频一区在线观看| 欧美日韩亚洲视频一区| 九七午夜视频| 丰满亚洲少妇av| 黄色成人在线观看| 欧美激情第6页| 亚洲第一天堂在线观看| 先锋亚洲精品| 欧美一级一区二区| 黄色网址在线免费看| 97香蕉超级碰碰久久免费的优势| 国产福利一区二区三区在线视频| 黄色av片三级三级三级免费看| 乱熟女高潮一区二区在线| 极品一区美女高清| 欧美精品久久99久久在免费线| 欧美精品18+| 少妇高潮一区二区三区99小说| 国产精品乱码一区二区三区| 亚洲一区在线免费| 欧美日韩偷拍视频| 北条麻妃99精品青青久久| 国产精品视频一二三四区| 视频二区在线观看| 精品视频资源站| www.综合网.com| 成熟亚洲日本毛茸茸凸凹| 欧美三级黄视频| 99久久人爽人人添人人澡| 成人免费毛片糖心| 欧美最猛黑人xxxx| 欧美孕妇性xxxⅹ精品hd| 免费国产自线拍一欧美视频| 在线播放性xxx欧美| 国产精品ⅴa有声小说| 一级做a爱视频| a'aaa级片在线观看| 久久出品必属精品| 国产精品剧情一区二区在线观看| 9i看片成人免费看片| 国产网站麻豆精品视频| 久久久久av| 亚洲一二三四2021不卡| 色噜噜狠狠狠综合欧洲色8|