【问题标题】:Expression type '@lvalue String?' is ambiguous without more context表达式类型“@lvalue 字符串?”没有更多上下文是模棱两可的
【发布时间】:2019-09-12 07:31:52
【问题描述】:

我得到了这个错误 表达式类型'@lvalue String?'在我的代码中没有更多上下文是模棱两可的:

    if textView.text != "" && takenImage != nil && userLocation.text != "" {
        checkInternet()
        // Create and save a new job
        let newJob = Job(text: textView.text, jobImage: takenImage!, addedByUser: (userLabel?.text)!(-> ERROR), userImage: UserImage, location: userLocation.text, passMap: takenLocation, userID: userID, postID: key)
        newJob.save()
    } 

我试图用其他问题的答案来解决它,但我没有得到它的工作......

职位类别:

var text: String = ""
var location: String = ""
var map: String?
var passMap: String?
var addedByUser: String?
var userImage: UIImage?
var jobImage: UIImage?
var downloadURL: String?
var userDownloadURL: String?
var numberOfLikes = 0
var numberOfDislikes = 0
let ref: DatabaseReference!
var userID: String?
var postID: String?


init(text: String? = nil, jobImage: UIImage? = nil, addedByUser: String? = nil, userImage: UIImage? = nil, location: String? = nil, passMap: String? = nil, userID: String? = nil, postID: String? = nil, data: [String : Any]) {
    self.text = text!
    self.jobImage = jobImage
    self.addedByUser = addedByUser
    self.userImage = userImage
    self.location = location!
    self.passMap = passMap
    self.userID = userID
    self.postID = postID
    ref = Database.database().reference().child("jobs").childByAutoId()
}

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    在上面的代码中,

    1. 直接使用userLabel?.text 而不打开任何东西。 addedByUser 的类型为 String?

    2. 您正在使用UserImage 类型作为userImage 参数。请改用UIImage 实例或nil

    3. 您没有在代码中添加data 参数。

    这是代码,

    let newJob = Job(text: textView.text, jobImage: takenImage, addedByUser: userLabel?.text, userImage: nil, location: userLocation.text, passMap: takenLocation, userID: userID, postID: key, data: [:])
    

    避免不必要地强制解包optionals。这可能会导致运行时异常

    【讨论】:

      【解决方案2】:

      有两点不对:

      textView.text != "" 您正在将可选的String 与非可选的进行比较。

      替换为:

      if let text = textView.text, text != ""

      然后在你的构造函数中,不要解开文本!

      如果你想保留可选的:

      self.text = text ?? "" //will avoid crash

      或者更好:

      init(text: String = "")

      【讨论】:

      • 可以比较一个可选字符串和一个非可选字符串的(不)相等性。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 1970-01-01
      • 2017-04-15
      • 2016-12-10
      • 1970-01-01
      相关资源
      最近更新 更多