gpt4 book ai didi

ios - 如何将 nil 分配给 RealmOptional

转载 作者:行者123 更新时间:2023-11-30 10:59:04 25 4
gpt4 key购买 nike

我有类似这样的模型类,并且不知道如何将快速可选值分配给 RealmOptional,它迫使我解开可选值。为什么我需要在分配给 RealmOptional 之前解开可选值。

将 swift 选项分配给 RealmOptional 的最佳选择是什么。

import Foundation
import RealmSwift

class Menu:Object {

var id = RealmOptional<Int>()

func initWithJSON(json: Any) {

let jsonResult = json as! [String: Any]

id = jsonResult["id"] as? RealmOptional<Int>

}
}

在强制我打开可选内容的错误消息下方。

enter image description here

最佳答案

您不应直接修改 RealmOptional 属性,而应始终修改其 value 属性,该属性保存基础 Optional 值。因此,您应该始终将 RealmOptional 声明为不可变,因为 RealmOptional 是引用类型,因此您仍然可以修改其 value 属性,而无需必须修改实际引用。

class Menu:Object {

let id = RealmOptional<Int>()

func initWithJSON(json: Any) {
let jsonResult = json as! [String: Any]
id.value = jsonResult["id"] as? Int
}
}

或者更好的是,使 RealmOptional 符合 Codable,然后您就可以使 Menu 也符合它。

extension RealmOptional: Codable where Value:Codable {
public convenience init(from decoder: Decoder) throws {
do {
let value = try decoder.singleValueContainer().decode(Value.self)
self.init(value)
} catch {
if case DecodingError.valueNotFound(_, _) = error {
self.init(nil)
} else {
throw error
}
}
}

public func encode(to encoder: Encoder) throws {
var container = encoder.singleValueContainer()
try container.encode(value)
}
}

class Menu: Codable {
let id = RealmOptional<Int>()
}

关于ios - 如何将 nil 分配给 RealmOptional<Int>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53611855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com