swift接触不多,只是用来写了一两个简单的项目,今天遇到有人问我,swift和oc究竟是什么区别,居然一时语塞,因为感觉有太多的区别了,但是细想好像又没有想想的那么差剧大,所以总结整理下。
也算是对swift的一个正式介绍吧
1.对比中看差异
[Swift学习: 从Objective-C到Swift](Swift学习: 从Objective-C到Swift)
1.1属性(property)和实例变量(instance variable)
strong: 在Swift中是默认的
weak: 通过weak关键词申明
weak var delegate: UITextFieldDelegate?
readonly,readwrie 直接通过声明常量let,声明变量var的方式来指明
copy 通过@NSCopying指令声明。
值得注意的是String,Array和Dictionary在Swift是以值类型(value type)而不是引用类型(reference type)出现,因此它们在赋值,初始化,参数传递中都是以拷贝的方式进行(简单来说,String,Array,Dictionary在Swift中是通过struct实现的)
1.2 nonatomic
nonatomic,atomic 所有的Swift properties 都是nonatomic。但是我们在线程安全上已经有许多机制,例如NSLock,GCD相关API等。个人推测原因是苹果想把这一个本来就用的很少的特性去掉,线程安全方面交给平时我们用的更多的机制去处理。
2. 单就swift谈未来
具体每一个的内容稍后整理(我承认又遗留东西了...)
2.1 编写高性能的 Swift 代码
polen:
内容对于初学者稍微高深了一点点....
有勇气的点进去看看
2.2 swift 教程合集
polen:
初学者专用
2.3 17条 Swift 最佳实践规范
计算型类型属性(Computed Properties)
当你只需要继承 getter 方法时,返回简单的 Computed 属性即可。例如,应该这样做:
class Example {
var age: UInt32 {
return arc4random()
}
}
而不是:
class Example {
var age: UInt32 {
get {
return arc4random()
}
}
}
如果你在属性中添加了 set 或者 didSet ,那么你应该显示地提供 get 方法。
class Person {
var age: Int {
get {
return Int(arc4random())
}
set {
print("That's not your age.")
}
}
}
|
2.4 Swift 面试题及其答案raywenderlich.com
就问一个问题 (如果答不上来,请默默点开链接去学习,乖~):
Swift2.0 增加了一个新的关键字来实现递归枚举。下面的例子是一个枚举类型,它在Node条件下有两个相关联的值类型T和List:
enum List{
case Node(T, List)
}
什么关键字可以实现递归枚举?