如何在 Realm Swift 中处理检索到的对象的键?

How to address key of retrieved object, in Realm, Swift?

我使用 Realm 为我的 iOS 移动应用程序创建了数据库,使用 Swift 编写。 我正在尝试寻找在 DB

中查找匹配的用户名和密码的方法

这是我目前拥有的,正在尝试过滤并获取具有匹配用户名的对象 我正在尝试从检索到的对象

中解决 attribute/key 调用的密码
@IBAction func SignInCheck(sender: AnyObject) {

    let realm = try! Realm()
    var currentlogin = realm.objects(UserRecords).filter("name = LogUsernameTextField.text") 
//this line causes SIGABRT to be thrown

    if currentlogin.password == LogPasswordTextField.text { //This is the incorrectly addressed line
        ....
    }
}

问题可能是我不了解对象如何以正确的方式工作,也不知道正确的语法来解决我想要的问题。

我怀疑它是结果形式的,但我仍然无法找到解决所需信息的方法。

这是供您参考的 table 结构

class UserRecords: Object {
  dynamic var username: String = ""
  dynamic var password: String = ""
  dynamic var latitude: Float = 0
  dynamic var longtitude: Float = 0
}

我愿意接受更好的解决方案和在 table 中查看 up/matching 密码的建议,如果有的话。

提前致谢

您在 filter 字符串中使用名为 name 的 属性,但在 UserRecords class 中 属性 称为 username。您还必须以不同方式创建过滤器字符串:

var currentlogin = realm.objects(UserRecords).filter("username = '\(LogUsernameTextField.text!)'")

另请注意,过滤方法 returns 是 列表 UserRecord 个匹配过滤器的对象,而不是单个对象。所以调用 if currentlogin.password == ... 会导致错误。

该列表只有一项(因为用户名是唯一的)但它仍然是一个列表。因此,要访问 UserRecord 对象,您可以调用 first:

var currentlogin = realm.objects(UserRecords).filter("name = LogUsernameTextField.text!").first 

UITextField returns 的 text 属性 也是可选的,所以你必须打开它。