文章为自己学习所用,系转载。为学习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 前面只需要两个赋值 ,那么最后多的都会插到最后的位置,形成第三个元素。