Swift: '!=' 不能应用于 'String' 和 'Any' 类型的操作数
Swift: '!=' cannot be applied to operands of type 'String' and 'Any'
我正在尝试检查字符串是否为空,如果不为空,我想在文本字段中显示 (outUrl.text)
let storage = UserDefaults.standard
var mainsite = storage.object(forKey:"sitestring") ?? ""
if (mainsite != "") {
outUrl.text = mainsite
}
但是我有错误:
错误:!= 不能应用于字符串类型的操作数和任何
如何检查字符串是否为空?
Objective-CAPI-[UserDefaults obejectForKey:]
返回的结果是id
类型,为了容纳各种类型的对象(NSString
,NSNumber
,等等,等等)。当访问表单 Swift 代码时,这将变为 Any?
(任何类型,可能 nil
)。
如果你知道存储的值确实是一个字符串,你需要在比较之前尝试转换它:!=
between values of types String
and Any?
isn't defined by默认!那有什么意义?):
var mainsite = storage.object(forKey:"sitestring") as? String ?? ""
这样,您要么得到一个 String
值(如果转换成功),要么得到一个空字符串(如果失败,因为键 "sitestring" 没有对象或者它不是'可转换为 String
值)。
推荐的解决方案是使用适当的 API (string(forKey:
) returns String
而不是 Any
和可选绑定。
好处是您可以摆脱任何类型转换和 nil 合并运算符
if let mainsite = UserDefaults.standard.string(forKey:"sitestring"), !mainsite.isEmpty {
outUrl.text = mainsite
}
UserDefaults.standard 的结果是 Any? 类型,因此在将值赋给 mainsite 变量之前,将其类型转换为 String。这是一个例子,
let storage = UserDefaults.standard
var mainsite = storage.object(forKey:"sitestring") as? String
我正在尝试检查字符串是否为空,如果不为空,我想在文本字段中显示 (outUrl.text)
let storage = UserDefaults.standard
var mainsite = storage.object(forKey:"sitestring") ?? ""
if (mainsite != "") {
outUrl.text = mainsite
}
但是我有错误: 错误:!= 不能应用于字符串类型的操作数和任何
如何检查字符串是否为空?
Objective-CAPI-[UserDefaults obejectForKey:]
返回的结果是id
类型,为了容纳各种类型的对象(NSString
,NSNumber
,等等,等等)。当访问表单 Swift 代码时,这将变为 Any?
(任何类型,可能 nil
)。
如果你知道存储的值确实是一个字符串,你需要在比较之前尝试转换它:!=
between values of types String
and Any?
isn't defined by默认!那有什么意义?):
var mainsite = storage.object(forKey:"sitestring") as? String ?? ""
这样,您要么得到一个 String
值(如果转换成功),要么得到一个空字符串(如果失败,因为键 "sitestring" 没有对象或者它不是'可转换为 String
值)。
推荐的解决方案是使用适当的 API (string(forKey:
) returns String
而不是 Any
和可选绑定。
好处是您可以摆脱任何类型转换和 nil 合并运算符
if let mainsite = UserDefaults.standard.string(forKey:"sitestring"), !mainsite.isEmpty {
outUrl.text = mainsite
}
UserDefaults.standard 的结果是 Any? 类型,因此在将值赋给 mainsite 变量之前,将其类型转换为 String。这是一个例子,
let storage = UserDefaults.standard
var mainsite = storage.object(forKey:"sitestring") as? String