繁体   English   中英

Swift中的KVO /异常处理

[英]KVO / Exception handling in Swift

请注意,这个问题是在2014年7月写的,在swift 1.0之前我大部分时间忽略了关于swift的任何内容,并试图将代码从objC“转换”为swift。 这不是一个好的解决方案,我现在知道的更好。 KVO是我们喜欢ObjC的东西,但我强烈建议不要在swift中使用它并在swift中探索一些替代方案。 http://blog.scottlogic.com/2015/02/11/swift-kvo-alternatives.html 请记住:如果某些事情很难做到,那么也许并不意味着要做。

作为一个obj-C开发人员,我已经习惯了KVO,好吧,年,其中一个反复出现的问题是调用removeObserver:forKeyPath:可能不安全removeObserver:forKeyPath:我通常用@try...@catch子句包围它...现在快速,我还没有找到尝试...抓住东西:)任何线索如何解决问题?

干杯

这是我的意思的一个例子

override func viewDidLoad()
{
    super.viewDidLoad();

    self.summaryTextView.text = self.show?.overview;
    self.title = self.show?.title;
    if(self.show?.imageData)
    {
        self.posterImageView.image = UIImage(data: self.show?.imageData);
    }
    else
    {
        self.posterImageView.image = UIImage(named:"wait");
        show?.addObserver(self, forKeyPath: "imageData", options: NSKeyValueObservingOptions.New, context: nil);
    }

}


override func viewDidDisappear(animated: Bool)
{
     // Will crash if self was not a observer in the first place
     self.show?.removeObserver(self, forKeyPath:"imageData");
}

override func observeValueForKeyPath(keyPath: String!, ofObject object: AnyObject!, change: NSDictionary!, context: CMutableVoidPointer)
{
     self.posterImageView.image = UIImage(data: self.show?.imageData);

}

正如另一个答案所说,Swift中没有尝试捕获。 老实说,我会阻止在你提到的场景中使用try / catch。 这可以通过跟踪对象的状态轻松解决,这在面向对象编程中总是一件好事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM