【问题标题】:What does error "Expression type '@lvalue String?' is ambiguous without more context" mean?什么错误“表达式类型'@lvalue字符串?'没有更多上下文就模棱两可”是什么意思?
【发布时间】:2019-06-25 11:01:12
【问题描述】:

在 TableView 控制器中,我有多个 UITextFields,允许用户输入一些信息并使用 Realm 保存用户输入的数据。

我使用以下方法添加数据,但我收到错误消息“表达式类型'@lvalue String?'在没有更多上下文的情况下是模棱两可的”

import UIKit
import RealmSwift

class NewIdeaCreation: UITableViewController, UITextFieldDelegate {

   let realm = try! Realm()

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}    

@IBAction func createButtonPressed(_ sender: UIButton) {

    try realm.write {
        realm.add(nameTextField.text) //Error here
    }
    self.dismiss(animated: true, completion: nil)
}


@IBOutlet weak var nameTextField: UITextField!

}

我应该在这里做什么?

【问题讨论】:

    标签: swift xcode realm


    【解决方案1】:
    • 首先添加对象模型
    class Item: Object {
    
        @objc dynamic var itemId: String = UUID().uuidString
        @objc dynamic var body: String = ""
        @objc dynamic var isDone: Bool = false
        @objc dynamic var timestamp: Date = Date()
    
        override static func primaryKey() -> String? {
    
            return "itemId"
    
        }
    
    
    }
    
    • 更新您的代码
     @IBAction func createButtonPressed(_ sender: UIButton) {
    
            try realm.write {
                realm.add(nameTextField.text) //Error here
            }
    
            self.dismiss(animated: true, completion: nil)
    
        }
    
    • 到这里
     @IBAction func createButtonPressed(_ sender: UIButton) {
    
            let item = Item()
            item.body = nameTextField.text ?? ""
            try! self.realm.write {
            self.realm.add(item)
           }
    
            self.dismiss(animated: true, completion: nil)
    
        }
    
    

    【讨论】:

      【解决方案2】:

      您只能将Realm Objects 保存到领域数据库中。 String 不是 Realm Object

      您可以创建一个具有String 的对象:

      class StringObject: Object {
          @objc dynamic var string = ""
          // Your model probably have more properties. If so, add them here as well
          // If not, that's ok as well
      }
      

      现在您可以保存StringObject

      do {
          try realm.write {
              let stringObject = StringObject()
              stringObject.string = nameTextField.text ?? ""
              realm.add(stringObject)
          }
      } catch let error {
          print(error)
      }
      

      【讨论】:

        猜你喜欢
        • 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
        相关资源
        最近更新 更多