函数返回对象的属性

函数返回对象的属性

问题描述:

我想改变一个对象的参数,但我想稍后决定什么是应该改变的参数。我正在考虑为此做一个功能,但不知道如何。下面是一个示例:函数返回对象的属性

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) 

如果从NSObjectCar继承你键值编码为免费的,可以通过这样

如果有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)