1. 程式人生 > >swift學習總結(更新中...)

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]],少加了一層括號。

[[[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:

testarr5)    //testarr4的地址不變,testarr5的地址改變了

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錯誤")

     }