Swift

Swift和KVC

Swift开发中,可以继续使用Objc中的KVC机制。受到的限制是,使用KVC的类必须是继承自NSObject,也就是说这样的Swift的类是不行的:

1
2
3
class MyObject{
...
}

Swift编写KVC步骤

具体写的步骤是(和用Objc是类似的),比如有个类,我们要观察它的属性triggerTime

1
2
class MenuView: UIView {
dynamic var triggerTime=NSDate()

这个属性可以是基本类型,比如Int。需要给属性标示为dynamic

Swift编写延时任务

Swift已经不能使用performSelector了,会有类似这样的报错:

1
'performSelector' is unavailable: 'performSelector' methods are unavailable

解决办法是,可以使用dispatch_after

编写dispatch_after代码是很繁琐的。我现在的做法是编写NSObjectextension,即,给NSObject添加个delay方法,然后就可以在项目中随处调用了。

Swift通过类名实例化对象

比如,我要根据NSNotification中传递的ViewController字符串创建ViewController实例。

代码如下:

1
2
3
4
5
6
let xibName=state+"ViewController"
let controllerName="SpainAppProto."+xibName

var classType: AnyObject.Type=NSClassFromString(controllerName)
var nsobjectype : UIViewController.Type = classType as UIViewController.Type
var viewController: UIViewController = nsobjectype(nibName: xibName, bundle: nil)

假设state是ViewController类的前缀。

参考了NSClassFromString() always returns nil,发现和objc编写的不同是,需要给类加上应用名称。

详细的代码,可参见我写的一个完整的示例