如何实现NSObject.setValue(值:AnyObject?,forKey key:String)?

时间:2016-04-12 19:43:04

标签: swift nsobject

我问,因为我想将该功能分别实现到一个类中。我当然可以继承NSObject,但由于它只是我想要的一种方法,我讨厌把所有其他垃圾都放到我的对象中。

1 个答案:

答案 0 :(得分:0)

从命令+单击方法:

  

给定标识属性的值和键,设置属性的值。给定一个识别一对一关系的对象和一个关键字,将该对象与接收者联系起来,如果有一个对象则与先前相关的对象无关。给定一个集合对象和一个标识多对多关系的密钥,将集合中包含的对象与接收者联系起来,如果有的话,则与先前相关的对象无关。

     

此方法的默认实现执行以下操作:

     
      
  1. 在接收器的类中搜索名称与模式-set:匹配的访问器方法。如果找到这样的方法   检查其参数的类型。如果参数类型不是   对象指针类型但值为nil -setNilValueForKey:is   调用。 -setNilValueForKey的默认实现:引发一个   NSInvalidArgumentException,但你可以覆盖它   应用。否则,如果方法参数的类型是a   对象指针类型该方法只是用值作为调用   论点。如果方法参数的类型是其他类型的那个   由-valueForKey完成的NSNumber / NSValue转换的反转:是   在调用方法之前执行。

  2.   
  3. 否则(没有找到访问者方法),如果接收者的班级' + accessInstanceVariablesDirectly方法返回YES,搜索   名称匹配的实例变量的接收器类   模式_,_is,或者按顺序排列。如果   找到这样的实例变量,其类型是对象指针   键入值保留,并在实例中设置结果   变量,在实例变量的旧值首次发布之后。   如果实例变量的类型是其他类型,则设置其值   在从NSNumber或NSValue进行相同类型的转换之后   1。

         
        
    1. 否则(没有找到访问器方法或实例变量),调用-setValue:forUndefinedKey:。默认实现   -setValue:forUndefinedKey:引发NSUndefinedKeyException,但是   你可以在你的申请中覆盖它。
    2.   
  4.