gpt4 book ai didi

ios - 我应该对以后发生变异的对象使用 var 还是 let ?

转载 作者:可可西里 更新时间:2023-11-01 00:52:21 24 4
gpt4 key购买 nike

我有一个 iOS 应用程序,它在启动时从持久存储中加载对象,稍后将在应用程序中对其进行操作。例如,在启动时,它会在数组中加载患者资料。如果我将添加到数组中的项定义为变量而不是常量,如果应用稍后会修改它们(比如在不同的 View Controller 中),这有关系吗?

在我的 App Delegate 中,我像这样加载它们:

func loadProfiles() {
var profileRecord: COpaquePointer = nil
if sqlite3_prepare_v2(db, "SELECT profilesid, objectSyncStatus, profileName, profileRelationship, profileFName, profileLName, profileAddress, profileCity, profileState, profileZip FROM profiles", -1, &profileRecord, nil) == SQLITE_OK {
if sqlite3_step(profileRecord) == SQLITE_ROW {
// Load profile stubs for each person
var newProfile = DBProfile(withDatabase: db, fromRecord: profileRecord, withLanguage: appLanguage, loadAllData: false)
patientProfiles.append(newProfile)
}
}
}

当然,我得到一个警告,说 newProfile 没有突变,它想在它被添加到数组之前将它更改为 let newProfile = ... .但是,如果我这样做,它以后会变得不可变吗?

感谢您的回答。

最佳答案

编译器实际上非常擅长确定您应该使用 let 还是 var,在这种情况下,它是正确的。

var 应该用在任何数据将被改变的地方。例如:

  • 属性将被改变的结构值
  • 指针(比如你的 COpaquePointer)
  • 将被重新分配给不同类实例的类实例

let 应该用在任何数据不会被改变的地方。例如:

  • 常量
  • 要添加到数组、字典、函数参数等的值。
  • 不会重新分配实例的类实例。

请注意,对于类的实例,您仍然可以修改类的属性,即使它被定义为letvar 仅应在类本身将被重新分配的情况下使用。

对于您的 newProfile 变量,在其生命周期内它永远不会发生变化。该对象被创建,然后立即附加到您的数组。该数组需要用 var 定义,因为它随 append 发生变化,但 newProfile 永远不会改变。如果您愿意,您可以在以后通过数组更改从 newProfile 附加的值,因为 patientProfiles 数组是可变的。

当您不确定是使用 let 还是 var 时,一个好的做法是从 let 开始,看看编译器是否报错.如果是,则将其更改为 var

关于ios - 我应该对以后发生变异的对象使用 var 还是 let ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33202696/

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