作者:fengsh998
转载请注明出处
如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢!
尽管swift作为一门新语言,但还保留了许多OC的机制,使得swift和OC更好的融合在一起。如果没有OC基础的先GOOGLE一下。
如:KVO,DELEGATE,NOTIFICATION。
详见DEMO。
- import Foundation
- @objc // 需要打开objc标识,否则@optional编译出错
- protocol kvoDemoDelegate {
- func willDoSomething()
- @optional func didDoSomething() //可选实现,
- }
- let ntfname = "test_notification"
- class kvoDemo : NSObject //不写NSObject默认就是从NSObject来的
- {
- var delegate: kvoDemoDelegate!
- var presult : Double = 0.0
- var result : Double {
- get{
- return presult;
- }
- set{
- self.presult = newValue
- }
- }
- init()
- {
- }
- func doSomething()
- {
- if let yet = self.delegate?
- {
- delegate!.willDoSomething()
- }
- for _ in 1..5
- {
- println("i'm doing now,don't touch me,please.")
- }
- if let yet = self.delegate?
- {
- delegate!.didDoSomething!()
- }
- }
- func notificationPost()
- {
- let ntf = NSNotificationCenter.defaultCenter()
- ntf.postNotificationName(ntfname, object :nil, userInfo:nil)
- }
- deinit
- {
- }
- }
- class ViewController: UIViewController,kvoDemoDelegate {
- //KVO
- override func observeValueForKeyPath(keyPath: String?, ofObject: AnyObject?, change: NSDictionary?, context: CMutableVoidPointer)
- {
- if keyPath == "result"
- {
- var newvalue : AnyObject? = change?.objectForKey("new");
- println("the new value is \(newvalue)")
- }
- }
- //delegate
- func willDoSomething()
- {
- println("i will do it.")
- }
- func didDoSomething()
- {
- println("i had do it.")
- }
- //notification
- func onRecviceNotification(notification:NSNotification)
- {
- println("Recevice notification \(notification)")
- }
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view, typically from a nib.
- var kvo = kvoDemo()
- kvo.addObserver(self, forKeyPath: "result", options: NSKeyValueObservingOptions.New | NSKeyValueObservingOptions.Old, context: nil)
- kvo.result = 280.0
- kvo.removeObserver(self,forKeyPath:"result",context: nil)
- kvo.delegate = self
- kvo.doSomething()
- let ntf = NSNotificationCenter.defaultCenter()
- ntf.addObserver(self, selector:"onRecviceNotification:", name :ntfname, object : nil)
- kvo.notificationPost()
- ntf.removeObserver(self)
- }
- }
结果:
- the new value is 280
- i will do it.
- i'm doing now,don't touch me,please.
- i'm doing now,don't touch me,please.
- i'm doing now,don't touch me,please.
- i'm doing now,don't touch me,please.
- i had do it.
- Recevice notification NSConcreteNotification 0x10be60930 {name = test_notification}