Swift:无法在NSObject的子类上设置描述

时间:2016-04-05 19:50:42

标签: swift

我构建了一个类似于以下内容的自定义类:

import UIKit

class Device: NSObject {

    var id = String()
    var name = String()
    var type = String()
    //var description = String()  //Cannot override with a stored property 'description'

}

非常简单的类,我继承了NSObject,因此我可以使用" setValue(value,forKey:keyName)"。但是,当我执行以下操作时:

device.setValue("My Description", forKey: "description")

我收到以下错误:

  

' NSUnknownKeyException',原因:' [setValue:forUndefinedKey:]:此类与密钥描述不符合密钥值编码。'

如此笨拙,我无法覆盖NSObject.description,但是当我尝试设置它时,我收到了一个错误。有没有人遇到过这个?

2 个答案:

答案 0 :(得分:2)

查看description的定义位置。它在NSObjectProtocol中列为

public var description: String { get }

您只能get描述属性,不能set

在Objective-C中,描述在大多数类中实现为一种方法;它没有下划线存储。 swift等价物是计算属性:

public override var description: String {
    return "I'm an object"
}

tl; dr使用计算属性而不是存储属性

class CustomObject : NSObject {
    private var des: String
    override var description: String {
        get {
            return des
        }
        set(newValue) {
            des = newValue
        }
    }

    init(string: String) {
        des = string
    }
}

答案 1 :(得分:1)

您只能获得 raise Exceptions::SecurityException, "Something security related happend." 属性,但不能description

在Objective-C字符串类中,set的类description指定该类继承自NSMutableString。说明,当您尝试设置描述时,它将收到错误。

  

方法1

使用NSString使用时可以使用。

存储属性值
setValue(value, forKey: keyName)

使用上面的代码,方法class ObjName: NSObject{ var id: String? var descriptions : String? override var description: String { get { return self.description } set(newvalue) { descriptions = newvalue } } } 将关键setValue值存储到description中。当你得到价值时,你可以使用descriptions。此外,它不会影响descriptions get。

  

方法2

覆盖setValue函数。如下。

description