- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个 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
应该用在任何数据将被改变的地方。例如:
let
应该用在任何数据不会被改变的地方。例如:
请注意,对于类的实例,您仍然可以修改类的属性,即使它被定义为let
。 var
仅应在类本身将被重新分配的情况下使用。
对于您的 newProfile
变量,在其生命周期内它永远不会发生变化。该对象被创建,然后立即附加到您的数组。该数组需要用 var
定义,因为它随 append
发生变化,但 newProfile
永远不会改变。如果您愿意,您可以在以后通过数组更改从 newProfile
附加的值,因为 patientProfiles
数组是可变的。
当您不确定是使用 let
还是 var
时,一个好的做法是从 let
开始,看看编译器是否报错.如果是,则将其更改为 var
。
关于ios - 我应该对以后发生变异的对象使用 var 还是 let ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33202696/
命令 svn status 返回如下内容: ? SomeClient\BUTCHERED.docx M SomeClient\Development notes.txt ?
我是一名优秀的程序员,十分优秀!