1.Array和[String]的转换
比如定义数组变量的时候定义为:
var cellSettingArray = [[[String:AnyObject]]]()
但是获取的数据源是let array:NSArray = NSArray.init(contentsOfFile: path)!;
cellSettingArray = array as! [[[String: AnyObject]]]
定义变量的时候写成了[[String:AnyObject]],少加了一层括号。
[[[String:AnyObject]]]
所以用一个value[0],以为value是数组,其实是字典。所以报的错误。
20161104
总结一下swift的一些特性:
1.不可变性
let关键字声明的都是不可变的,不像OC中对象的值可以通过引用对象被改变。
要理解值类型的概念,值类型是稳定的。
2. 类型安全
不可隐式转换
3.optional的使用,判断对象是否为nil
4.函数式API
map filter
方法和函数的区别:
方法是跟类相关的,依赖于类,或者一些类中别的参数影响。
函数的输出结果只跟它的参数有关。
5.返回类型有可选,元组,或者返回一个函数
可以嵌套函数
上面的总结参考Objc中国swift系列文章 https://objccn.io/issues/
上个月给自己定了一个目标,用swift完成一个当前项目里的页面。
之前swift刚出来的时候看过一点,现在swift3.0了,相当于重新开始学。先看了一遍3.0翻译的文档。
https://www.cnswift.org/ 边看可以自己新建一个playground写代码测试。
然后就开始写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区别就可以。
open func copyItem(atPath srcPath: String, toPath dstPath: String) throws
do {
try fileManager.copyItem(atPath: filePath!, toPath: dbPath)
}catch {
print("copy item错误")
}