我刚刚开始编码。我正在使用Swift创建一个iOS应用程序,即使退出应用程序也需要能够存储两个变量。为此,我正在使用Realm。我能够写出这两个变量,但是当我尝试阅读它们时,我无法构建我的项目。
我尝试了许多tutorats,但每次尝试将它们应用于我的问题时都失败了。
这是我的Realm课程:
class Info: Object {
dynamic var name = ""
dynamic var gender = ""
}
如何在ViewController中读取这两个变量的值?
当我尝试读取变量时,行上有错误
guard let info = realm.objects(Info.self).first else {return}
我的ViewController的:
import UIKit
import RealmSwift
class SettingsViewController: UIViewController {
let realm = try! Realm()
guard let info = realm.objects(Info.self).first else {return}
let name = info.name
let gender = info.gender
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
答案 0 :(得分:2)
您可以像这样访问if(isset($_COOKIE['tmp_user_id'])) {
$user_id = $_COOKIE['tmp_user_id'];
}
个变量:
Realm
但是,如果您不打算在存储上存储更复杂的数据,我建议您只使用let realm = try! Realm()
guard let info = realm.objects(Info.self).first else {return}
let name = info.name
let gender = info.gender
,对于这样一个简单的任务,它更容易使用。
如果要存储字符串文字,还应将UserDefaults
更改为正确的« »
符号。
对于问题的编辑部分:
"
必须在guard let info = realm.objects(Info.self).first else {return}
函数中发生。在实际初始化类之前,您无法访问viewDidLoad
,这是您的类的实例属性,因此会出现错误。如果您需要info作为实例属性,请将其初始化为可选项并在realm
内访问它。
第一个选项 - 如果您只需要访问viewDidLoad
内的info
:
viewDidLoad
第二个选项 - 如果您需要在类实例中的任何位置访问class SettingsViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let realm = try! Realm()
guard let info = realm.objects(Info.self).first else {return}
let name = info.name
let gender = info.gender
}
}
:
info
如果这是您的初始视图控制器,则将域声明为实例属性可能会有问题,因为您的类可能在class SettingsViewController: UIViewController {
let realm = try! Realm()
var info: Info?
override func viewDidLoad() {
super.viewDidLoad()
info = realm.objects(Info.self).first else {return}
let name = info.name
let gender = info.gender
}
}
函数执行完毕之前被实例化,因此您的application(didFinishLaunchingWithOptions)
将不会在您尝试在realm schema
中访问它时,请正确设置。如果是这种情况,只需在SettingsViewController
内移动let realm = try! Realm()
行。