Swift 函数返回对象';s属性

Swift 函数返回对象';s属性,swift,Swift,我想更改对象的参数,但我想稍后决定应该更改哪些参数。我想做一个函数,但不知道怎么做。以下是一个示例: 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 = Chang

我想更改对象的参数,但我想稍后决定应该更改哪些参数。我想做一个函数,但不知道怎么做。以下是一个示例:

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)
请记住,如果输入错误的属性名称,此代码将崩溃

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
后像这样使用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)
请记住,如果输入错误的属性名称,此代码将崩溃

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)

希望这能回答您的问题。

您可以通过将
Car
作为
NSObject
的子类,利用KVC
setValue(value:AnyObject?,forKey:String)
方法

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)

通过使
Car
成为
NSObject
的子类,可以利用KVC
setValue(value:AnyObject?,forKey:String)
方法

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)

如果
Car
继承自
NSObject
您可以免费获得键值编码,并可以使用
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)

如果
Car
继承自
NSObject
您可以免费获得键值编码,并可以使用
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)

通过这样做,您可以稍微简化您的方法

如果将所有属性存储在结构本身中,则根本不需要担心这一点

希望这能有所帮助

    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)