大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。
虽然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}
版权声明:本文博主原创文章,博客,未经同意不得转载。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/117120.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...