swift學習總結(更新中...)
1.Array和[String]的轉換
比如定義陣列變數的時候定義為:
var cellSettingArray = [[[String:AnyObject]]]()
但是獲取的資料來源是let array:NSArray = NSArray.init(contentsOfFile: path)!;
直接寫 cellSettingArray = array,會報錯 可以轉化一下,如下:cellSettingArray = array as! [[[String: AnyObject]]]
因為解析plist檔案,數組裡是第二層陣列,第二組陣列的元素是字典。定義變數的時候寫成了[[
[[[String:AnyObject]]]
所以用一個value[0],以為value是陣列,其實是字典。所以報的錯誤。
20161104
總結一下swift的一些特性:
1.不可變性
let關鍵字宣告的都是不可變的,不像OC中物件的值可以通過引用物件被改變。
要理解值型別的概念,值型別是穩定的。
2. 型別安全
不可隱式轉換
3.optional的使用,判斷物件是否為nil
4.函式式API
map filter
方法和函式的區別:
方法是跟類相關的,依賴於類,或者一些類中別的引數影響。
函式的輸出結果只跟它的引數有關。
5.返回型別有可選,元組,或者返回一個函式
可以巢狀函式
上個月給自己定了一個目標,用swift完成一個當前專案裡的頁面。
之前swift剛出來的時候看過一點,現在swift3.0了,相當於重新開始學。先看了一遍3.0翻譯的文件。
然後就開始寫demo,遇到不會的再回頭來查詢文件。
遇到的問題:
1.陣列:
var testarr4:[Int]=[1,2,3,4,5];
var testarr5=testarr4;
address(o: testarr4)
address(o: testarr5) //這兩個列印資料是一樣的
testarr5[2]=0;
address(o: testarr4)
address(o:
print("testarr4:\(testarr4)\n testarr5:\(testarr5) \n ");
//執行結果:
/*
testarr4:[1, 2, 3, 4, 5]
testarr5:[1, 2, 0, 4, 5]
*/
這一點跟OC是不同的,OC裡指標指向的是一塊記憶體。swift裡,當陣列改變的時候會自動的拷貝一份。而且也不需要用NSMutableArray來限制陣列可變,let和var區別就可以。
2.有些語法不知道怎麼寫openfunc copyItem(atPath srcPath: String, toPath dstPath: String) throws
剛開始不知道throws什麼意思,呼叫fileManager的 copyItem方法的時候一直報錯,要加do try catch.在網上找了挺久...do {
try fileManager.copyItem(atPath: filePath!, toPath: dbPath)
}catch {
print("copy item錯誤")
}