您可以檢查第一物體存在,從斯威夫特文檔:
public var first: T? { return rlmResults.firstObject() as! T? }
如果爲空返回結果的第一個對象,或爲零。
從JAVA領域的文檔(無法找到斯威夫特文檔同樣的措辭):
注意到一個RealmResults永遠不能爲null不是即使在它不包含任何對象的情況。您應該始終使用size()方法來檢查RealmResults是否爲空。
長話短說,檢查第一個對象是否存在或嘗試對元素進行計數。
來源:
Java - Class RealmResults,
Swift - Results Class Reference
編輯:這裏是一個代碼示例,它是從境界例如採取和修改,以我的需求,他們使用的通知令牌來檢測是否陣列是空的
class Record: Object {
dynamic var workoutName = ""
dynamic var totalTime = ""
dynamic var date = ""
}
let realm = try! Realm()
let array = try! Realm().objects(Record).sorted("date")
var notificationToken: NotificationToken?
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
// Set results notification block
notificationToken = array.addNotificationBlock { [weak self] (changes: RealmCollectionChange) in
guard let tableView = self?.tableView else { return }
switch changes {
case .Initial:
// Results are now populated and can be accessed without blocking the UI
tableView.reloadData()
break
case .Update(_, let deletions, let insertions, let modifications):
// Query results have changed, so apply them to the UITableView
tableView.beginUpdates()
tableView.insertRowsAtIndexPaths(insertions.map { NSIndexPath(forRow: $0, inSection: 0) },
withRowAnimation: .Automatic)
tableView.deleteRowsAtIndexPaths(deletions.map { NSIndexPath(forRow: $0, inSection: 0) },
withRowAnimation: .Automatic)
tableView.reloadRowsAtIndexPaths(modifications.map { NSIndexPath(forRow: $0, inSection: 0) },
withRowAnimation: .Automatic)
tableView.endUpdates()
break
case .Error(let error):
// An error occurred while opening the Realm file on the background worker thread
fatalError("\(error)")
break
}
}
}
我也清除表格u唱deleteAll():
func clearTable() {
try! realm.write {
realm.deleteAll()
}
}
我覺得這是'Results' API不充分的情況下。你可以請[文件GitHub問題](https:// github。com/realm/realm-cocoa/issues/new)提到這個缺陷? – bdash
提交https://github.com/realm/realm-cocoa/issues/3579。謝謝,@bdash –