Swift 全球';让';声明需要初始值设定项表达式
我正在使用Xcode 10.2.1编写iOS代码 我在声明let全局变量时遇到问题:Swift 全球';让';声明需要初始值设定项表达式,swift,Swift,我正在使用Xcode 10.2.1编写iOS代码 我在声明let全局变量时遇到问题: import UIKit import CouchbaseLiteSwift private let database: Database 这将导致以下编译器错误: Global 'let' declaration requires an initializer expression 在这种情况下,我不知道如何使数据库成为全局变量。我搜索过它,但都是关于一些int或string初始化的,而不是在初始化类
import UIKit
import CouchbaseLiteSwift
private let database: Database
这将导致以下编译器错误:
Global 'let' declaration requires an initializer expression
在这种情况下,我不知道如何使数据库成为全局变量。我搜索过它,但都是关于一些int或string初始化的,而不是在初始化类时,比如数据库
。因为Couchbase的数据库类是一个大类。我不能用“=null”
有什么帮助吗?如果您不确定变量是什么,您需要一个变量,以便以后可以更改它:
private var database: Database?
如果你不打算把它定义为某种东西,那就没有意义了。let
变量的区别在于,它在被读取之前只被赋值一次
如果let
声明是局部变量,Swift可以分析代码,以确保变量在使用前只初始化一次。这就是为什么可以声明没有初始值的局部let
变量。例如:
let问候语:字符串
if(light.isOn()){
问候语=“你好!”
}否则{
问候语=“谁在那里?!”
}
//现在可以使用问候语了,因为我们知道代码的使用
//只有一个if分支,每个分支初始化问候语
打印(问候语)//OK
对于实例变量,只要每个初始值设定项只设置一次,就不需要指定初始值
然而,对于一个全局变量,编译器实际上无法保证何时将谁分配给它。因此,您必须立即给它一个初始值
正如@rmaddy在评论中指出的,它可能看起来像这样:
private let database=数据库(名称:“foo”)
如果初始化需要多条语句,则可以在闭包中对它们进行批处理,如下所示:
private let数据库={
让config=readConfigFile()
guard let dbName=config[“数据库”]else{
fatalError(“缺少“数据库”的配置”)
}
返回数据库(名称:dbName)
}()
如果必须将其设置为全局,但在以后才可以初始化,则必须将其设置为var
:
私有var数据库:数据库?
…或者,如果您希望在它初始化为崩溃程序之前尝试使用它:
私有var数据库:数据库!
您需要一个=
然后进行一些适当的初始化。您想要一个全局变量(如您所述)还是一个全局常量?let是一个常量,因此您必须在声明时为其提供一个初始值(例如,private let database:database=database()
,或仅private let database=database())
。如果需要变量,请将其设置为var
。搜索时找到的所有内容都是正确的,即使是关于int或字符串。我尝试了这两种方法,但都显示“调用中缺少参数'name'的参数”基本上,只需将其更改为private-let-database:database?
private-let-database:database?也不起作用。相同的错误全局“let”声明需要初始值设定项表达式