2015-10-26 47 views
13

我想在Realm中使用一個可選的Int,並且出現我認爲的一箇舊錯誤。Realm中的可選Int

代碼

dynamic var reps: Int? = nil 

錯誤

'Property cannot be marked dynamic because its type cannot be represented in Objective-C' 

我使用的境界與0.96.1 7.1的XCode

我的境界文檔中瞭解它說Int ISN」 t支持爲Optional但是https://twitter.com/realm/status/656621989583548416。這是來自Realm twitter的,這就是爲什麼我很困惑。 Optional Int支持還是不支持?

+0

你是否更新了Realm?另外,你在使用Cocoapods嗎?你確定你使用0​​.96.1嗎? –

+0

是的,我正在使用CocoaPods。 Realm 0.96.1和RealmSwift 0.96.1 –

+0

嘗試使用Int16,32或64.我正在查看文檔,它說它們只支持0.96.1中的文檔。你正在使用Swift 2.0分支,對嗎? –

回答

26

從境界文檔:

StringNSDate,和NSData屬性可以被聲明爲可選的或非可選使用標準夫特語法。

可選數字類型使用RealmOptional聲明:

class Person: Object { 
    // Optional string property, defaulting to nil 
    dynamic var name: String? = nil 

    // Optional int property, defaulting to nil 
    // RealmOptional properties should always be declared with `let`, 
    // as assigning to them directly will not work as desired 
    let age = RealmOptional<Int>() 
} 

let realm = try! Realm() 
try! realm.write() { 
    var person = realm.create(Person.self, value: ["Jane", 27]) 
    // Reading from or modifying a `RealmOptional` is done via the `value` property 
    person.age.value = 28 
} 

RealmOptional支持IntFloatDoubleBool,和所有的IntInt8Int16Int32Int64)的尺寸版本。

UPDATE:

只是關於對於具有Int

According到篩分版本實現一個可選的數字值的RealmOptional方式修正錯誤的認爲是在Tweet由境界提到的可選INTS如果你想在Realm對象中有可選的數值,那麼Realm的傢伙仍然必須使用RealmOptional。你不能像其他可選類型那樣簡單地使用它。

所以dynamic var reps: Int?將無法​​正常工作。

+0

我看到在我剛剛在0.96.1 Int中看到的文檔中也被支持。我認爲這些文檔是0.96 –

+0

我剛更新到RealmSwift 0.96.2,它仍然會得到與您在嘗試將Int定義爲「可選」時描述的錯誤消息相同的錯誤消息。在0.96.1的發行說明中,它表示「在Swift中使用可選的Int16/Int32/Int64屬性時修復崩潰。」。他們只把它稱爲錯誤修復,而不是新功能。恕我直言,添加「真正的」可選Int將是一個新功能。所以我想你仍然必須使用'RealmOptional'' – joern

+0

順便說一句'Int32'有同樣的錯誤。 – joern