我想减少 init 方法的长度。
struct Person {
var id: Int
var firstName: String
var lastName: String
var vehicle: String
var location: String
var timeZone: String
init (id: Int, firstName: String, lastName: String, vehicle: String, location: String, timeZone: String ) {
self.firstName = firstName
self.lastName = lastName
self.vehicle = vehicle
self.location = location
self.timeZone = timeZone
}
}
下面是我正在创建的 Person
实例。我必须传入每个内联变量的值。
let person = Person(id: 22, firstName: "John", lastName: "Doe", vehicle: "Chevy", location: "Dallas", timeZone: "CST")
问题:如何缩短 init?
的长度 在 Obj-C 中,我曾经创建一个数据模型类。填充它的变量然后传递整个类,减少 init 方法的长度。
即
Person *person = [Person new];
person.id = 22;
person.firstName = "John";
person.lastName = "Doe";
person.vehicle = "Chevy";
person.location = "Dallas";
person.timeZone = "CST"
Person *person = [Person initWithPerson:person];
在 Swift 中有什么等效的方法可以减少 init
的长度,而不必初始化每个内联变量?我知道元组是一种方式,还有其他最佳做法吗?
最佳答案
只需删除初始化程序!
struct Person {
let id: Int
let firstName: String
let lastName: String
let vehicle: String
let location: String
let timeZone: String
}
现在你可以使用memberwise initializer
Person(
id: 87112,
firstName: "Walter",
lastName: "White",
vehicle: "2004 Pontiac Aztek",
location: "Albuquerque",
timeZone: "UTC-07:00"
)
Structure types automatically receive a memberwise initializer if they do not define any of their own custom initialisers.
不要使用变量
如您所见,我将 var
替换为 let
。
除非您需要在创建值后更改 Person
的某些属性,否则我建议您使用 let
。否则,您可以自由使用 var
。这样编译器将防止不必要的更改。
不要使用可选值
我不知道您的应用程序的业务逻辑,但是如果一个人必须始终填充所有 6 个属性,请不要将它们设为可选。否则,每次您需要使用 Person
值时,编译器都会强制您检查该可选值是否有值。
不要使用隐式解包选项
说真的。在少数情况下它们很有用,而模型值不是其中之一
关于Swift:减少 Init 方法的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35278523/