在Swift中,Key-Value Coding是否可用于自定义对象而无需继承NSObject?

时间:2017-05-30 18:02:19

标签: ios swift cocoa key-value-coding

Key-Value Coding Programming Guide中,它声明NSObject子类符合KVC。

  

从NSObject或其子类之一继承的Swift对象默认是符合其属性的键值编码

自定义对象(结构,类)是否可以采用NSKeyValueCoding并且符合KVC标准? 另外,KVC如何通过继承NSObject来给对象一个?

1 个答案:

答案 0 :(得分:2)

与正式协议不同,任何对象在技术上都符合NSKeyValueCodingNSObject可通过Informal Protocols:

获取NSObject
  

非正式协议是NSObject上的一个类别,它暗含了这个类别   几乎所有对象都采用该协议。 (类别是一种语言   功能,使您可以在没有子类化的情况下向类添加方法   它。)非正式协议中方法的实施是   可选的。在调用方法之前,调用对象检查以查看   目标对象是否实现它。直到可选协议   方法在Objective-C 2.0中引入,非正式协议是   对Foundation和AppKit类实现的方式至关重要   一行。

这与简单地将KVC直接实现到NSObject相反,我认为非正式协议的主要好处是将NSKeyValueCoding的功能分成单独的文件。但使用非正式协议可能还有其他好处

由于NSObject function initMap() { var uluru = {lat: -25.363, lng: 131.044}; var map = new google.maps.Map(document.getElementById('map'), { zoom: 4, center: uluru }); var marker = new google.maps.Marker({ position: uluru, map: map, image: 'icon.png' }); }上的一个类别,遗憾的是您不能只使任何自定义对象支持KVC