挺辛苦的一天。
昨天晚上回家爬立,不知道抽哪門子風钾唬,買了一大桶可樂,喝了不少侠驯。半夜躺在床上一直睡不著抡秆,翻來覆去想各種奇怪的事情,最后終于在早上5點睡著吟策。早上8點半又起來搶火車票儒士,好消息是搶到了。
白天很忙檩坚,一直在寫一個數(shù)據(jù)統(tǒng)計的腳本着撩,用python+sql最終實現(xiàn)的。現(xiàn)在想來匾委,還是覺得python的語法最舒服睹酌,很多東西很簡潔。
今天swift學的還算不錯剩檀,中午看了30來分鐘,下午又看了1個多小時旺芽。很平穩(wěn)的推進過程沪猴。
筆記如下:
1 關聯(lián)類型。
在類型不確定的情況下采章,需要聲明一個或多個關聯(lián)類型运嗜。相當于一個占位名。作為關聯(lián)類型在協(xié)議被實現(xiàn)之前是不需要指定的悯舟。關鍵字:typealias
protocol Container {
typealias ItemType
mutating func append(item: ItemType)
var count: Int { get }
subscript(index: Int) -> ItemType { get }
}
struct IntContainer<T>: Container {
var data = [T]()
typealias ItemType = T //遵循協(xié)議實現(xiàn)類型, 這行可以注釋掉担租,因為swift的類型推斷
var count: Int {
return data.count
}
mutating func append(item: T) {
data.append(item)
}
subscript(index: Int) -> T {
return data[index]
}
}
如果一個已有的類已滿足協(xié)議所有的功能,比如Array就滿足Container的所有要求抵怎,可以簡單的直接聲明Array遵循該協(xié)議:
extension Array: Container{}
2 where語句類型約束奋救。對于關聯(lián)類型定義約束是非常有用的》刺瑁可以使用where語句來定義參數(shù)的約束尝艘。
func allItemsMatch<C1: Container, C2: Container
where C1.ItemType == C2.ItemType, C1.ItemType: Equatable>
(leftContainer: C1, rightContainer: C2) -> Bool {
var res = true
if leftContainer.count != rightContainer.count {
res = false
} else {
for i in 0..<rightContainer.count {
if leftContainer[i] != rightContainer[i] {
res = false
break
}
}
}
return res
}
3 訪問級別。swift提供了三種訪問級別姿染,public背亥,internal,private,基本類似于java的public狡汉,包訪問權限娄徊,private。
默認訪問權限為internal盾戴。
當開發(fā)Framework時寄锐,需要把一些實體定義為public級別,這些被定義為public的實體捻脖,就是這個Framework的API锐峭。
類的訪問級別也會影響到類成員(屬性,函數(shù)可婶,初始化方法)的默認訪問級別沿癞。如果類聲明為private,那么該類所有的成員的默認訪問級別也是private矛渴。如果將類聲明為public或internal或是不明確的指定訪問級別椎扬,那么該類的所有成員的訪問級別是internal。
注意:public類的默認訪問權限是internal而不是public具温,如果想將某個成員聲明為public蚕涤,必須明確使用修飾符public。
public class SomePublicClass { //顯式的public類
public var somePublicProperty = 0 //顯式的public成員
var someInternalProperty = 0 //隱式的internal成員
private func somePrivateMethod() {} //顯式的private成員
}
class SomeInternalClass { //隱式的internal類
var someInternalProperty = 0 //隱式的internal成員
private var somePrivateProperty = 0 //顯式的private成員
}
private class SomePrivateClass { //顯式的private類
var somePrivateProperty = 0 //隱式的private成員
private func somePrivateMethod() {} //顯式的private成員
}
晚上回去必須早點睡铣猩。否則明天啥精神都沒揖铜。還要記得明天早上搶2月5號的票。
最近喜歡上看王垠的文章了达皿。記得很久以前第一次看他寫的東西天吓,覺得口氣太大,內容空洞峦椰。最近又看了不少他的技術類文章龄寞,發(fā)覺好像變了,成長了不少汤功,算是黑轉粉了吧物邑。
高貴的活著。