作者:Erica Sadun,原文鏈接澄阳,原文日期:2016-04-11
譯者:CMB踏拜;校對:shanks;定稿:千葉知風(fēng)
我最近發(fā)布的文章 《準(zhǔn)備好迎接 3.0 API 變化》 得到了一些很有趣的反饋速梗。最近發(fā)布了一些有關(guān) Swift 3 提議的文章肮塞,特別是關(guān)于 SE-0005 , 這些文章中解釋了在 Swift 中 ObjC APIs 是如何自動轉(zhuǎn)換的襟齿,也說明了這些轉(zhuǎn)換在 Swift 中使用 Cocoa 的影響。
在即將到來的變化中枕赵,自動默認(rèn)(auto-defaulting
)可能是我在 SE-0005
提議中最喜歡的猜欺】酱埽可以看到 SE-0005
中說明了允許導(dǎo)入 APIs 來定義很多實參,當(dāng)你在 Swift 中調(diào)用時篮昧,你可以省略一些參數(shù)的定義。
現(xiàn)在如果遇到下列幾種情況將會提供自動默認(rèn)的值:
尾隨閉包:可空的閉包參數(shù)懊昨,將默認(rèn)為 nil
NSZones:可空的空間,將默認(rèn)為 nil(提案指出疚颊,當(dāng)
NSZones
已經(jīng)不在 Swift 中使用時,NSZones
應(yīng)該要默認(rèn)為 nil)選項集(OptionSetType):任何類型中名字包含
Options
材义,將默認(rèn)為 [](空選項集)字典:當(dāng)字典參數(shù)名字包含
options
,attributes
和info
的時候,將默認(rèn)為[:](空字典)
這個變化規(guī)則對單個參數(shù)的 setter 沒任何作用(setCompletionHandler: value
和 setOptions: value
)油挥。話說回來,這個規(guī)則會導(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 中將簡化為:
rootViewController.present(alert, animated: true)
UIView.animateWithDuration(0.2, delay: 0.0,
animations: { self.logo.alpha = 0.0 }) {
_ in self.logo.hidden = true
}
本文介紹的自動默認(rèn)對完成后的回調(diào), 用戶信息字典, 屬性字典(例如當(dāng)要使用 NSFileManager
和 NSAttributedString
的時候) 和 選項組(像 AVFoundation 的 AVMusicSequenceLoadOptions
, AudioComponentInstantiationOptions
和 AVMovieWritingOptions
)影響最大深寥。
這樣設(shè)計的目的是讓 Swift 顯得更加簡潔贤牛,也不需要為了達(dá)到一次填充而再去自定義函數(shù)來代替原本無意義輸入的 “opt-out” 值(如 nil, []
和 [:]
)。點擊這個地址可以查看一些例子殉簸,只要你搜索 “= nil”, “= []” 和 “= [:]” 就可以看到這些 APIs 的變化。