2015年12月4日,完成了第四课"More Swift and Foundation Frameworks"的学习
这一课无代码演示,主要讲解了一些Swift的基本语法知识,好在之前已经打下了基础,没有在这一课的学习中较为顺利,但关于初始化器和懒加载以及will set,did set.方面的知识还要继续进行补充
本课的主要知识点如下
- 可选类型其实就是个枚举
enum Optional<T> { ///T为关联值得类型
case None
case Some(T)
}
let x: String? = nil 相当于 let x = Optional<String>.None
let x: String? = "hello" 相当于 let x = Optional<String>.Some("hello")
- 解包"!"就相当于一个Switch
switch x {
case some(let value):y = value
case None: //raise an exception
}//在None的情况下就会抛出异常
- 遍历字典
for (ket , value) in xxx {
print("\(key) = \(value)")
}
NSObject是OC中所有类的基类,swift中并没有一个这样的基类,但swift类也可以集成字NSObject
NSNumber是一个装数字的类,swift不会用到很多,因为swift是强类型语言
NSDate 储存日期的类
NSDate 比特包,里面是无类型的数据
swift中的数据结构
class,struct,enum是swift数据结构中的三个基础块
相同点:1.语法声明上很像 2.都有属性和函数 3.都可以有初始化构造器
不同点:1.class是三种中仅有继承性质的 2.内省和转换(Introspection and casting)也是class独有的 3.class是引用类型. struct和enum是值类型AnyObject主要用于兼容现有OC API和iOS代码,其是指向一个未知类的指针
我们会在哪里用到它?
var destinationViewController : AnyObject
var toolbarItems: [AnyObject]
func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject)
func addConstraints(constranits: [AnyObject])
func appendDigit(sender: AnyObject)
class func buttonWithType(buttonType: UIButton) -> AnyObject
如何进行转换?
利用as强制转换
var destinationViewController : AnyObject
let calcVC = destinationViewController as CalculatorViewController
利用as?在转换前进行判断
if let calcVC = destinationViewController as? CalculatorViewController {...}
[AnyObject]数组的转换
var toolbarItems: [AnyObject]
for item in toolbarItems {
if let toolbarItems = item as? UIBarButtonItem {
}
}
...or...
for toolbarItem in toolbarItems as [UIBarButtonItem] {}//直接将整个[AnyObject]数组转换成了[UIBarButtonItem]