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类型,为了容纳各种类型的对象(NSStringNSNumber,等等,等等)。当访问表单 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