Swift vs. Objective-C
- 用Swift 將協(xié)議(protocol)中的部分方法設(shè)計(jì)成可選(optional),該怎樣實(shí)現(xiàn)安拟?
@optional
和@required
是Objective-C中特有的關(guān)鍵字宵喂。
Swift中,默認(rèn)所有方法在協(xié)議中都是必須實(shí)現(xiàn)的。而且唆铐,協(xié)議里方法不可以直接定義optional
奔滑。先給出兩種解決方案:
- 在協(xié)議和方法前都加上
@objc
關(guān)鍵字顺少,然后再在方法前加上optional
關(guān)鍵字。該方法實(shí)際上是把協(xié)議轉(zhuǎn)化為Objective-C的方式然后進(jìn)行可選定義梅猿。示例如下:
* @objc protocol SomeProtocol {
* func requiredFunc()
* @objc optional func optionalFunc()
* }
- 用擴(kuò)展(extension)來規(guī)定可選方法秒裕。Swift中,協(xié)議擴(kuò)展(protocol extension)可以定義部分方法的默認(rèn)實(shí)現(xiàn)几蜻,這樣這些方法在實(shí)際調(diào)用中就是可選實(shí)現(xiàn)的了。示例如下:
* protocol SomeProtocol {
* func requiredFunc()
* func optionalFunc()
* }
*
* extension SomeProtocol {
* func optionalFunc() {
* print(“Dumb Implementation”)
* }
* }
*
* Class SomeClass: SomeProtocol {
* func requiredFunc() {
* print(“Only need to implement the required”)
* }
* }
上一題 | 目錄 | 下一題 |
---|