每周的文檔閱讀
Swift 2.0之初識面向協(xié)議編程
Swift 2.0 支持協(xié)議擴展((protocol extensions):協(xié)議擴展可以使某些特定的情況下,簡化協(xié)議。
因為一個類型可以遵守多個協(xié)議,所以它可以從各個協(xié)議中接收到不同的默認實現(xiàn)。與其它語言中所支持的多重繼承不同(說的就是C++吧),協(xié)議擴展不會為遵守它的類型增加額外的狀態(tài)。
所有的類,結(jié)構(gòu)體和枚舉都可以遵守協(xié)議,而基類只能被類所繼承。
協(xié)議擁有為值類型增加默認實現(xiàn)的能力,而不僅僅是類
很好的用處1:
定義一個協(xié)議遵從BooleanType類型
protocol Bird: BooleanType
使用協(xié)議擴展能讓我們有更簡便的方法。
extension BooleanType where Self: Bird {
var boolValue: Bool {
return self.canFly
}
}
這個擴展可以讓 canFly 屬性來表示每個 Bird 類型的布爾值。就直接可以拿類型來當(dāng)bool值來判斷true ,false
Swift2.0 支持泛型
try?
try?總是給已經(jīng)在求值的結(jié)果類型又增添一層Optional。如果一個方法正常返回的類型是Int?,那么使用try?調(diào)用這個方法就會返回Int??或者Optional<Optional<Int>>文章
用模式匹配解析 URL
Generator 基本和 C++ 中的迭代方法一樣。它是一個對象,next() 方法會返回被迭代序列中的下一個值,當(dāng)?shù)浇Y(jié)尾時返回 nil。
每個 SequenceType(特別是array)都有一個生成器,我們只需要對每個值調(diào)用 next() 方法就可以建立元組。如果這個數(shù)組比較短,它將用 nil 填充最后幾個值:
本周遇到的問題和解決
Array的困惑
Array struct類型的泛型,是值類型的,OC中NSMutableArray是引用類型的,而且可以存放不同的類型的變量,即默認存放的是AnyObject,當(dāng)然Array也可以存放任意類型如
var array = Array<AnyObject>()
array.append(12)
array.append(13)
array.append("nihao")
for a in array where a is String {
//output nihao
print(a)
}
Enum的困惑
Enum類型的每個枚舉值都可以關(guān)聯(lián)一個值,并通過switch 語句提取出來,但是不能修改這個值例如:
enum ServerResponse{
case Result(String, String)
case Error(String)
}
let success = ServerResponse.Result("6:00 am", "8:09 pm")
let failure = ServerResponse.Error("Out of cheese.")
switch success {
case let .Result(sunrise,sunset):
let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."
case let .Error(error):
let serverResponse = "Failure... \(error)"
}
形如:
if let str = String? {
if let url = NSURL(str){
....
}
}
可以改寫成:
if let str = String?,let url = NSURL(str){
....
}
這是一個遞進的拆包語句 ,也就是說第一個let 失敗接下去的將不執(zhí)行
本周項目的進展和解決
登入界面的邏輯
-
viewDidLoad()從NSUserDefaults.standardUserDefaults()讀取數(shù)據(jù)庫中的保存的用戶配置 -
checkForLog()檢測文本框是否已經(jīng)輸入完畢 -
verifyLogInform驗證登入信息
不足:添加網(wǎng)絡(luò)制式的判斷,將頭像文件等讀取到當(dāng)前用戶
設(shè)置界面邏輯
- 實現(xiàn)退出操作