日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > [Swift]Day13:協議

[Swift]Day13:協議

來源:程序員人生   發布時間:2014-12-29 09:42:18 閱讀次數:2643次

協議

屬性協議

我們可以在協議中定義屬性,下面的代碼就是毛病的,由于協議中定義了只讀屬性,但是卻嘗試修改其值:

protocol FullyNamed { var fullName: String { get } } struct Person: FullyNamed{ var fullName: String } let john = Person(fullName: "WHY") john.fullName = "WHY" // ERROR!

協議合成

1個協議可由多個協議采取 protocol<SomeProtocol, AnotherProtocol> 這樣的格式進行組合,稱為協議合成(protocol composition)。

protocol Named { var name: String { get } } protocol Aged { var age: Int { get } } struct Person: Named, Aged { var name: String var age: Int } func wishHappyBirthday(celebrator: protocol<Named, Aged>) { println("Happy birthday (celebrator.name) - you're (celebrator.age)!") } let birthdayPerson = Person(name: "Malcolm", age: 21) wishHappyBirthday(birthdayPerson)

協議實戰

我們來設計1個計數器,實戰練習1下協議相干的內容。

首先先定義1個協議,CounterDataSource ,這個協議提供了增量值,也就是說,計數器每次計數增加的數值。這個值可以是1個固定值,比如每次增1,也能夠是個方法,根據不同情況返回不同的增量值。所以我們的定義以下:

@objc protocol CounterDataSource { optional func incrementForCount(count: Int) -> Int optional var fixedIncrement: Int { get } }

@objc 表示協議是可選的,也能夠用來表示暴露給Objective-C的代碼,只對類有效。

接下來我們來定義1個計數器,這個計數器里有1個 CounterDataSource 類型的數據源。有點像是UITableViewDataSource 的感覺,我們通過這個協議來獲得這1次計數增加的步長。如果 dataSource 實現了incrementForCount 方法,那末就通過這個方法來獲得步長,否則看看能不能通過固定值獲得步長:

@objc class Counter { var count = 0 var dataSource: CounterDataSource? func increment() { if let amount = dataSource?.incrementForCount?(count) { count += amount } else if let amount = dataSource?.fixedIncrement? { count += amount } } }

可以先用固定值的方法計數:

class ThreeSource: CounterDataSource { let fixedIncrement = 3 } var counter = Counter() counter.dataSource = ThreeSource() for _ in 1...4 { counter.increment() println(counter.count) } // 3 // 6 // 9 // 12

也能夠用方法來計數:

class TowardsZeroSource: CounterDataSource { func incrementForCount(count: Int) -> Int { if count == 0 { return 0 } else if count < 0 { return 1 } else { return -1 } } } counter.count = -4 counter.dataSource = TowardsZeroSource() for _ in 1...5 { counter.increment() println(counter.count) } // ⑶ // ⑵ // ⑴ // 0 // 0

最近時間有限,簡單瀏覽了1下官方文檔。以后遇到了再補充吧。


References

  • Protocols
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 毛片一区 | 国产一区二区高清视频 | 成人av在线网址 | 簧片免费在线观看 | 欧美精品成人一区二区在线观看 | 精品久久久网站 | 国户精品久久久久久久久久久不卡 | 国产在线激情 | 日韩精品一二三区 | 91偷拍精品一区二区三区 | 麻豆精品国产91久久久久久 | 九九香蕉视频 | 爱情岛论坛首页永久网址 | 国产三区精品 | 亚洲成人免费在线 | 欧美精品在线免费观看 | 亚洲在线一区 | 久久久久久久久久美女 | 亚洲精品久 | 久久久久91 | 欧美一级黄 | 欧美精品一二三区 | 欧美精品黄色 | 亚洲精品久久久久久久久久久久久久 | 日韩精品免费一区二区三区 | 奇米7777欧美日韩免费视频 | 日韩精品 电影一区 亚洲 | 精品人伦一区二区三区蜜桃网站 | 中字一区 | 成人国产精品视频 | 99精品视频免费观看 | 中文av字幕在线观看 | 久热福利| 欧美 日韩 国产 在线 | 亚洲精选久久 | 最新中文字幕视频在线 | 日韩中文字幕电影 | 精品专区| 欧美福利网 | 日韩免费一级 | 青青草综合在线 |