函数返回对象的属性
问题描述:
我想改变一个对象的参数,但我想稍后决定什么是应该改变的参数。我正在考虑为此做一个功能,但不知道如何。下面是一个示例:函数返回对象的属性
class Car {
var color = "green"
var brand = "Zastava"
var mechanic = "Mark Gaia"
}
struct Change {
var property: String
var newValue: String
}
let car = Car()
let change = Change(property: "brand", newValue: "Fiat")
car.propertyFromChange(change) = change.newValue // ??? How to implement this line
如何使函数返回需要更改的对象的参数?
或者,如何选择更改哪个参数?
(...我想到switch
声明是一个很好的方向吗?)
我很确定这是网络上已经讨论过的东西。我已经阅读了关于函数的所有内容,并且找不到解决方案,所以我想我正在使用错误的关键字进行搜索。
答
从NSObject
继承后,您不需要创建一个可以使用KVC的函数,也可以创建一个新的函数来保护不良的属性名称。
class Car: NSObject {
var color = "green"
var brand = "Zastava"
var mechanic = "Mark Gaia"
}
struct Change {
var property: String
var newValue: String
}
let car = Car()
let change = Change(property: "brand", newValue: "Fiat")
car.setValue(change.newValue, forKey: change.property)
请记住,如果输入错误的属性名称,此代码将崩溃。
希望这回答你的问题。
答
您可以利用KVC setValue(value: AnyObject?, forKey key: String)
方法使Car
成为NSObject
的一个子类。
class Car: NSObject {
var color = "green"
var brand = "Zastava"
var mechanic = "Mark Gaia"
}
struct Change {
var property: String
var newValue: String
}
let car = Car()
let change = Change(property: "brand", newValue: "Fiat")
car.setValue(change.newValue, forKey: change.property)
答
如果从NSObject
Car
继承你键值编码为免费的,可以通过这样
如果有setValue:forKey
class Car : NSObject {
var color = "green"
var brand = "Zastava"
var mechanic = "Mark Gaia"
}
struct Change {
var property: String
var newValue: String
}
let car = Car()
let change = Change(property: "brand", newValue: "Fiat")
car.setValue(change.newValue, forKey: change.property)
答
更改值可以简化你的方法有点你将所有的属性存储在结构本身中,你根本不需要担心。
:)希望这有助于
struct CarProperties {
var color : String = ""
var brand : String = ""
var mechanic : String = ""
}
class Car {
var carProperties = CarProperties()
}
let car = Car()
car.carProperties.color = "Green"
car.carProperties.brand = "yourFavBrand"
car.carProperties.mechanic = "whatever"
let change = "this"
// Suppose you want to change the brand
car.carProperties.brand = change
print(car.carProperties.brand)