iOS開發swift -- Realm入門
一 關於Realm
1、Realm 是一個跨平臺的移動資料庫引擎,為移動應用的資料持久化而生。其目的是要取代 Core Data 和 SQLite。
2、特點:
(1)使用簡單,大部分常用的功能(比如插入、查詢等)都可以用一行簡單的程式碼輕鬆完成,易學習。
(2)Realm 不是基於 Core Data,也不是基於 SQLite 封裝構建的。它有自己的資料庫儲存引擎。
(3)Realm 具有良好的跨平臺特性,可以在 iOS 和 Android 平臺上共同使用。程式碼可以使用 Swift 、 Objective-C 以及 Java 語言來編寫。
(4)Realm 還提供了一個輕量級的資料庫檢視工具(Realm Browser)。你也可以用它進行一些簡單的編輯操作(比如插入和刪除操作)
二 sdk整合 CocoaPods
$ cd/你的專案地址
$ open -e Podfile
target '你的app' do
pod 'RealmSwift'
end
$ pod install
三 資料型別
(1)Realm支援以下的屬性型別:Bool、Int8、Int16、Int32、Int64、Double、Float、String、NSDate 、以及NSData.CGFloat 屬性被取消了,因為它的型別不依賴於平臺。
String、NSDate以及 NSData型別的屬性都可以新增可選值。Object
型別的屬性必須設定為可選。儲存可空數字可以通過 Realm 可選值來實現。
(2)關係
Object 能夠藉助 Object以及 List屬性來和另一個 Object建立聯絡。 List 的介面和 Array非常類似,在 List中的物件能夠通過索引下標(indexed subscripting)進行訪問。 與 Array所不同的是,List其中只能存放簡單的 Object子類型別。
//Realm資料模型是基於標準 Swift 類來進行定義的,使用屬性來完成模型的具體定義。通過簡單的繼承 Object 或者一個已經存在的模型類,您就可以建立一個新的 Realm 資料模型物件。
//由於 Realm 中定義的所有模型在程式啟動時就會被解析,所以即使程式碼中沒有呼叫,它們都需要被初始化。在 Swift 中使用 Realm 的時候,Swift.reflect(_:)函式可用於確定您模型中的資訊,這需要確保 init()已被成功呼叫。這意味著所有非可選的屬性必須新增一個預設值。
import RealmSwift
//型別
class ConsumeType:Object {
//型別名
dynamic var name = ""
}
//詳情
class ConsumeItem:Object {
//條目名
dynamic var name = ""
//金額
dynamic var cost = 0.00
//時間
dynamic var date = Date()
//所屬消費類別
dynamic var type:ConsumeType?
}
四 建立資料庫
//使用預設資料庫
let realm = try! Realm()
//使用其他資料庫
let config = Realm.Configuration(
// 獲取需要打包檔案的 URL 路徑
fileURL: Bundle.main.url(forResource: "MyBundledData", withExtension: "realm"),
// 以只讀模式開啟檔案,因為應用資料包並不可寫
readOnly: true)
let realm = try! Realm(configuration: config)
//記憶體資料庫 通常情況下,Realm 資料庫是儲存在硬碟中的,但是您能夠通過設定 inMemoryIdentifier 而不是設定Realm.Configuration 中的 fileURL 屬性,以建立一個完全在記憶體中執行的資料庫。記憶體資料庫在每次程式執行期間都不會儲存資料。但是,這不會妨礙到 Realm 的其他功能,包括查詢、關係以及執行緒安全
let realm = try! Realm(configuration: Realm.Configuration(inMemoryIdentifier: "MyInMemoryRealm"))
五 資料增刪改查
func addCilck(){
let type1 = ConsumeType()
type1.name = "衣服"
let type2 = ConsumeType()
type2.name = "飲食"
//建立資料記錄 可使用陣列建立
let item1 = ConsumeItem(value: ["水果",5999.00,Date(),type1])
let item2 = ConsumeItem()
item2.name = "電影"
item2.cost = 30.00
item2.date = Date(timeIntervalSinceNow: -36000)
item2.type = type2
// * 三次處理事物 會傳送三次通知
//增加
try! realm?.write({
realm?.add(item1)
realm?.add(item2)
})
//更新
try! realm?.write({
item3.name = "dog"
})
//查詢
let item4 = realm?.objects(ConsumeItem.self).filter("cost = 5999")
//刪除
try!realm?.write({
realm?.delete(item4!)
})
}
六 通知
var token : NotificationToken? = nil
override func viewDidLoad() {
super.viewDidLoad()
//集合通知
let result = realm?.objects(ConsumeItem.self)
token = result?.addNotificationBlock({ (changes: RealmCollectionChange) in
switch changes {
case .initial:
//Results 現在已經填充完畢,可以不需要阻塞 UI 就可以被訪問
debugPrint("initial initial")
break
case .update(_, deletions: _, insertions: _, modifications: _):
//資料庫發生更改(增刪改)呼叫
debugPrint("update update")
break
default:
break
}
})
//列印出資料庫地址
print(Realm.Configuration.defaultConfiguration.fileURL ?? "nil")
}
deinit {
token?.stop()
}
如有不妥,請多多指教:)
相關文章
- ios應用開發+swift語言入門iOSSwift
- Realm for SwiftSwift
- IOS開發Swift程式設計從入門到精通(視訊教程14G)iOSSwift程式設計
- iOS 藍芽開發 - swift版iOS藍芽Swift
- Realm資料庫 從入門到“放棄”資料庫
- iOS 開發選擇OC還是Swift?iOSSwift
- Realm ios踩坑筆記iOS筆記
- 大白話Swift入門Swift
- 史丹佛iOS Swift開發公開課總結(一)iOSSwift
- IOS Widget(3):SwiftUI開發小元件佈局入門iOSSwiftUI元件
- IOS 初級開發入門教程(一)介紹篇iOS
- iOS開發中使用OC和swift的對比iOSSwift
- Python可以開發IOS或安卓APP嗎?Python入門!PythoniOS安卓APP
- 用 Swift 模仿 Vue + Vuex 進行 iOS 開發(二):CoordinatorSwiftVueiOS
- 敏捷開發入門敏捷
- Swift iOS:KVOSwiftiOS
- Swift iOS : RichTextSwiftiOS
- Swift iOS : ArchiveSwiftiOSHive
- Xcode Instruments除錯swift入門教程XCode除錯Swift
- 8天讓iOS開發者上手Flutter之一:快速入門FlutteriOSFlutter
- Shiro入門學習---使用自定義Realm完成認證|練氣中期
- iOS逆向入門解析iOS
- [譯]iOS開發者在Swift中應避免過度使用@objciOSSwiftOBJ
- 【Android開發入門教程】三.Activity入門指南!Android
- (一)TypeScript開發入門TypeScript
- 新手入門 Git 開發Git
- Kubernetes Operator 開發入門
- 前端開發快速入門前端
- HarmonyOS快速開發入門
- 驅動開發入門
- Git入門與開發Git
- 敏捷開發入門教程敏捷
- Android Things 開發入門Android
- OWIN Middleware開發入門
- iOS開發UI篇--UICollectionView初步入門iOSUIView
- Swift iOS : 解析jsonSwiftiOSJSON
- 基於iOS 10、realm封裝的下載器iOS封裝
- Swift 開發視訊 iOS 開發視訊教程完整版下載 (共四季)SwiftiOS
- 翻譯:iOS Swift單元測試 從入門到精通 Unit Test和UI測試 UITestiOSSwiftUI