在我的应用程序中的视图控制器中,我通过观察
center
属性,如下所示:
class CoordinatingViewController: UIViewController {
@IBOutlet weak var cardContainerView: CardView!
override func viewDidLoad() {
super.viewDidLoad()
addObserver(self, forKeyPath: "cardContainerView.center", options: [.new], context: nil)
}
}
目前这工作还不错,但是由于密钥路径是一个字符串,编译器无法检查它。为了缓解这种情况,我想使用SWIFT 3
#keyPath()
语法,它接受编译器检查的密钥路径并返回正确的对应字符串。但是,当我将该行改为这样使用时:
addObserver(self, forKeyPath: #keyPath(cardContainerView.center), options: [.new], context: nil)
编译器给出了两个错误:
-
键入“cardview!”没有成员“center”
-
不能在“cardview!”类型的实例中引用类型成员“center”
我不明白为什么我会犯这些错误
center
是记录在案的财产
UIView
,其中
CardView
直接继承,我可以在
#密钥路径()
陈述一下。此外,当我以字符串的形式直接传递密钥路径时,一切似乎都正常工作,如我的第一个示例中所示,这使得这更加令人困惑。我如何让编译器为我检查密钥路径?