文章為自己學習所用,系轉載。為學習51cto課程的筆記。如有侵權,請私信本人進行刪除。
鏈接如下。
http://edu.51cto.com/roadmap/view/id-58.html
1 let array1 = ["abc","efg"] 2 let array2 = ["ccc",4] 4 println(array2); 5 6 var array3:String[]=["abc", "ddd"] //指定了數組類型。要求每一個數組元素都是字符串。 //這里會報錯,需要改成為var array3:[String] = ["abc","ddd"] 7 8 let array4:String[] = array1 //這里會報錯,需要像上面修改,但仍會報錯,NSObject is not identical to String。感覺是等號左右兩端類型不一樣。把這句修改成為let array4 = array1就不會報錯了。 9 10 array1[0] = "xyz" //這里會報錯:@lvalue $T5 is not identical to NSObject,感覺是等號兩端類型不一樣,修改array1類型為var后,這里就不會報錯了。但看視頻里老師的講解的意思是let是表示數組類型是常量,但值是可以隨意再賦值的,不知道這里為什么會不一樣。 11 12 println(array4) //xyz,efg //按照后來修改的情況,這里是abc,efg。按老師的講解,array1和array4使用了同一塊內存空間,那么修改array1后,array4也會自動修改,這里我將array1修改成為var模式了,所以使用的不同的內存空間,所以先把array1賦給array4后,array1的修改對array4就不生效了?ps:這里print了一下array1是xyz,efg。
13 //println(array4,array1) 按自己修改后,這里會提示錯誤 。cannot invoke 'println' with an argument list of type '([String], @lvalue[String])'
//println(array1 , array3)也會提示錯誤。cannot invoke 'println' with an argument list of type '(@lvalue[String],@lvalue[String])'
14 var intArray = Int[]() //創建一個Int類型,這里報錯,寫為var intArray1 = [Int]()就不報錯了。 15 16 var fourInts1 = Int[](count:4,repleatedValue:2)//同上,會報錯,寫成為[Int]就不報錯了。 17 18 var strArray1 = ["abc","bb"] 19 var strArray2 = ["xxx","yyy"] 20 var strArray = strArray1 + strArray2 21 println(strArray) // [abc,bb,xxx,yyy] 不是每個數組元素相加,相加的時候每個數組元素的類型必須是一致的。 22 23 24 strArray1[0...1] = ["xyz","ddd"] 25 println(strArray1) //[xyz,ddd] 26 strArray2[0..1] = [ "xyz","ddd"] //會報錯,左閉右開區間新寫法是[0..<1]就不會報錯了。 27 println(strArray2) //[xyz,ddd,xyz]三個點是左閉右閉。兩個點表示左閉右開,xyz插到了xxx的位置,但是ddd沒處去了,所以插到了第二個元素xyz的前面(賦值的值比索引多的話,就會插到后面的元素之前)。這句如果需要正確賦值,改成strArry2[0..2]就可以了。
三個點:閉區間
兩點:左閉右開區間
1 strArray1[0...1] = ["xyz","ddd","uuu"] 2 println(strArray1) //[xyz,ddd,uuu] 3 4 前面只需要兩個賦值 ,那么最后多的都會插到最后的位置,形成第三個元素。
