我想在運行時檢查Swift中屬性數據類型的類型。像插入時一樣,我想檢查實體中的特定屬性是否接受日期類型或字符串類型的值。 Swift如何實現這一點。如何在運行時檢查覈心數據屬性類型?
回答
這是type(of:)
.E.g,
let test: Int = 0
if type(of: test) == Int.self {
print("found")
}
對於Swift來說這是真的,但對於Core Data來說,使用Core Data的反射方法會更好。 –
您可以隨時使用實體的屬性描述是型NSAttributeDescription,找出正確的類型是在模型中定義的屬性。
如果說你有一個子類NSManagedObject,Person。然後,你可以使用從下面的代碼示例插入之前先檢查類型,
@objc(Person)
class Person: NSManagedObject {
@NSManaged
var name: String
@NSManaged
var age: NSNumber
@NSManaged
var dateOfBirth: Date
}
let person = NSEntityDescription.insertNewObject(forEntityName: "Person", into: context) as! Person
if let attribute = person.entity.attributesByName["name"],
attribute.attributeType == .stringAttributeType {
// use your code here for custom logic
print("name is string")
}
if let attribute = person.entity.attributesByName["age"],
attribute.attributeType == .dateAttributeType {
// use your code here for custom logic
print("age is date")
}
在一般情況下,你應該知道你的模型是什麼,你寫你的代碼之前。 所以對只讀模型的反思似乎有點愚蠢。我想不出爲什麼你會這樣做,但我相信你有一個很好的理由,你沒有分享。
你可以看看一個managedObject entity
類方法(在你的子類上),它是一個NSEntityDescription
。或者您可以直接從您的模型對象(context.persistentStoreCoordinator.managedObjectModel.entites
)獲取所有實體描述,或者如果您知道該實體的名稱,則可以使用context.persistentStoreCoordinator. managedObjectModel.entitiesByName["EntityName"]
。實體描述會告訴你有關實體屬性的所有信息。您可以查看每個屬性並獲取NSAttributeDescription
,它會告訴您該屬性的類型。
- 1. 核心數據屬性類型列表?
- 2. 核心數據 - 更改屬性類型
- 3. 核心數據數據模型:UIColor的屬性類型
- 4. 如何分辨核心數據的NSNumber的屬性的類型
- 5. 如何在運行時檢查類型?
- 6. 映射核心數據模型屬性類型
- 7. 核心數據集屬性
- 8. Xcode核心數據屬性
- 9. 核心數據從子類中檢索NSManagedObject屬性
- 10. 核心數據檢查是否從未設置屬性
- 11. iPhone - 核心數據檢查內部NSSet屬性
- 12. 核心數據屬性設置的類型轉換
- 13. 核心數據找不到屬性的類型設備
- 14. 抽象實體的核心數據通用屬性類型
- 15. 在運行時動態創建核心數據模型
- 16. 在運行時自定義核心數據模型?
- 17. Swift - 核心數據運行時錯誤
- 18. 得到屬性類型在運行時
- 19. 核心數據屬性唯一性
- 20. 如何檢查對象屬性類型?
- 21. 核心數據數組作爲屬性
- 22. 如何在運行時檢查EF模型元數據?
- 23. 核心數據用空格和新行導入屬性(從NSString類型)
- 24. Python檢查 - 查找GAE中屬性的數據類型db.model類
- 25. 核心數據:觸發一個屬性更改的長時間運行
- 26. 如何查找Haskell運行時的核心數
- 27. 如何使用核心數據執行子查詢作爲屬性?
- 28. 如何在Dart中執行運行時類型檢查?
- 29. 檢查覈心數據屬性是否在添加新數據屬性之前包含值
- 30. 何時版本核心數據模型
選中此項。 https://stackoverflow.com/questions/24006165/how-do-i-print-the-type-or-class-of-a-variable-in-swift。 –
你有沒有例子? – Siriss
實際上,由於模型是隻讀的,因此您應該知道運行時的屬性及其類型。 – vadian