gpt4 book ai didi

Swift:减少 Init 方法的长度

转载 作者:搜寻专家 更新时间:2023-11-01 06:20:09 24 4
gpt4 key购买 nike

我想减少 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.

The Swift Programming Language

不要使用变量

如您所见,我将 var 替换为 let。除非您需要在创建值后更改 Person 的某些属性,否则我建议您使用 let。否则,您可以自由使用 var。这样编译器将防止不必要的更改。

不要使用可选值

我不知道您的应用程序的业务逻辑,但是如果一个人必须始终填充所有 6 个属性,请不要将它们设为可选。否则,每次您需要使用 Person 值时,编译器都会强制您检查该可选值是否有值。

不要使用隐式解包选项

说真的。在少数情况下它们很有用,而模型值不是其中之一

关于Swift:减少 Init 方法的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35278523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com