我构建了一个类似于以下内容的自定义类:
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,但是当我尝试设置它时,我收到了一个错误。有没有人遇到过这个?
答案 0 :(得分:2)
查看description
的定义位置。它在NSObjectProtocol
中列为
public var description: String { get }
您只能get
描述属性,不能set
。
在Objective-C中,描述在大多数类中实现为一种方法;它没有下划线存储。 swift等价物是计算属性:
public override var description: String {
return "I'm an object"
}
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