作者:Erica Sadun贵试,原文鏈接宿饱,原文日期:2016-04-11
譯者:CMB陨溅;校對(duì):shanks壹无;定稿:千葉知風(fēng)
我最近發(fā)布的文章 《準(zhǔn)備好迎接 3.0 API 變化》 得到了一些很有趣的反饋葱绒。最近發(fā)布了一些有關(guān) Swift 3 提議的文章,特別是關(guān)于 SE-0005 , 這些文章中解釋了在 Swift 中 ObjC APIs 是如何自動(dòng)轉(zhuǎn)換的斗锭,也說(shuō)明了這些轉(zhuǎn)換在 Swift 中使用 Cocoa 的影響地淀。
在即將到來(lái)的變化中,自動(dòng)默認(rèn)(auto-defaulting
)可能是我在 SE-0005
提議中最喜歡的岖是“锘伲可以看到 SE-0005
中說(shuō)明了允許導(dǎo)入 APIs 來(lái)定義很多實(shí)參实苞,當(dāng)你在 Swift 中調(diào)用時(shí),你可以省略一些參數(shù)的定義烈疚。
現(xiàn)在如果遇到下列幾種情況將會(huì)提供自動(dòng)默認(rèn)的值:
尾隨閉包:可空的閉包參數(shù)黔牵,將默認(rèn)為 nil
NSZones:可空的空間,將默認(rèn)為 nil(提案指出爷肝,當(dāng)
NSZones
已經(jīng)不在 Swift 中使用時(shí)猾浦,NSZones
應(yīng)該要默認(rèn)為 nil)選項(xiàng)集(OptionSetType):任何類(lèi)型中名字包含
Options
,將默認(rèn)為 [](空選項(xiàng)集)字典:當(dāng)字典參數(shù)名字包含
options
,attributes
和info
的時(shí)候灯抛,將默認(rèn)為[:](空字典)
這個(gè)變化規(guī)則對(duì)單個(gè)參數(shù)的 setter 沒(méi)任何作用(setCompletionHandler: value
和 setOptions: value
)跃巡。話(huà)說(shuō)回來(lái),這個(gè)規(guī)則會(huì)導(dǎo)致函數(shù)調(diào)用的變化如下所示:
rootViewController.presentViewController(
alert,
animated: true,
completion: nil)
UIView.animateWithDuration(
0.2, delay: 0.0, options: [],
animations: { self.logo.alpha = 0.0 }) {
_ in self.logo.hidden = true
}
在 Swift 3.0 中將簡(jiǎn)化為:
rootViewController.present(alert, animated: true)
UIView.animateWithDuration(0.2, delay: 0.0,
animations: { self.logo.alpha = 0.0 }) {
_ in self.logo.hidden = true
}
本文介紹的自動(dòng)默認(rèn)對(duì)完成后的回調(diào), 用戶(hù)信息字典, 屬性字典(例如當(dāng)要使用 NSFileManager
和 NSAttributedString
的時(shí)候) 和 選項(xiàng)組(像 AVFoundation 的 AVMusicSequenceLoadOptions
, AudioComponentInstantiationOptions
和 AVMovieWritingOptions
)影響最大牧愁。
這樣設(shè)計(jì)的目的是讓 Swift 顯得更加簡(jiǎn)潔,也不需要為了達(dá)到一次填充而再去自定義函數(shù)來(lái)代替原本無(wú)意義輸入的 “opt-out” 值(如 nil, []
和 [:]
)外莲。點(diǎn)擊這個(gè)地址可以查看一些例子猪半,只要你搜索 “= nil”, “= []” 和 “= [:]” 就可以看到這些 APIs 的變化。
本文由 SwiftGG 翻譯組翻譯偷线,已經(jīng)獲得作者翻譯授權(quán)磨确,最新文章請(qǐng)?jiān)L問(wèn) http://swift.gg。