【问题标题】:can not convert value type "string?" to expected argument type "inout string"无法转换值类型“字符串?”到预期的参数类型“inout string”
【发布时间】:2016-10-11 10:07:47
【问题描述】:

这一行self.displayResultLable.text += (title as! String) 抛出错误

无法转换值类型“字符串?”到预期的参数类型“inout string”

这是我的代码:

   if results.count > 0 {
                    var displayResult : String?
                    for books in results as! [NSManagedObject] {

                        if let title = books.valueForKey("title") {

                            self.displayResultLable.text +=  (title as! String)

                        }
                    }
                }

这里的inout 字符串是什么?最佳做法是什么?

注意这一行 self.displayResultLable.text = (title as! String) 工作正常:

【问题讨论】:

    标签: swift string swift2 swift3


    【解决方案1】:

    你需要这样写:

    self.displayResultLable.text =  self.displayResultLable.text! + title as! String
    

    这是因为左侧是可选的,而右侧不是并且它们不匹配。这就是为什么你需要写 label.text = label.text +...

    我还可以建议您将您的 if let 改为:

    if let title = books.valueForKey("title") as? String {
       self.displayResultLable.text = (self.displayResultLable.text ?? "") + title
    }
    

    【讨论】:

    • displayResultLable.text 是选项类型?
    • @twilight2,这是因为左侧是可选的,而右侧不是并且它们不匹配。这就是为什么你需要写label.text = label.text +...
    • 如果self.displayResultLable.text 还没有被赋值(例如,有值nil)怎么办?然后在... = self.displayResultLable.text! ... 中显式展开它会产生运行时异常。 不应该鼓励使用显式(“强制”)展开,除非已断言用于展开的对象不是nil。更安全的方法是例如使用nil 合并运算符设置文本的默认“当前状态”,以防其String 属性为nil。例如。 self.displayResultLable.text = (self.displayResultLable.text ?? "") + title
    • 另外,请注意不存在可选的 += 重载(即,即使 lhs 和 rhs 都是相同包装类型的可选,也没有 += 运算符)。原因很明显;给定两个选项(相同的包装类型),比如lhsrhs,如果lhsrhsnillhs 的结果值是什么lhs += rhs?跨度>
    • @dfri 你的评论真的很有用。非常感谢
    【解决方案2】:

    我建议您仅在可选 (self.displayResultLable.text) 不为 nil 时才使用可选链接运算符来执行文本添加:

    self.displayResultLable.text? +=  (title as! String)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-18
      • 2019-12-24
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多