๋ฐ์ํ
PrimaryKey
class Customer: Object {
@objc dynamic var idx = 0
}
- primaryKey๋ก ์ฌ์ฉํ ํ๋กํผํฐ๋ฅผ ์ ์ํด์ค
override class func primaryKey() -> String? {
return "idx"
}
- primaryKey๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ์ฌ ์ฝ๊ฒ primaryKey ๋ฅผ ์ง์ ํ ์ ์์
- ๋ฆฌํด๊ฐ์ด String์ด๋ฏ๋ก ํ๋กํผํฐ ๋ช ์ ์คํธ๋ง์ผ๋ก ๋ฆฌํดํด์ค
AutoIncrease
- primaryKey๋ก ์ง์ ํ๋ค๊ณ ์๋์ผ๋ก ๊ฐ์ ์ฆ๊ฐ์ํค๋ฉด์ ๊ณ ์ ๊ฐ์ ๊ฐ์ง๊ฒ ํ๋ ๊ธฐ๋ฅ์ ์์
- realm์ ์ฌ์ฉ์ ์ง์ ํจ์์ ํ๋กํผํฐ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์๊ธธ๋๋ง๋ค ๊ฐ์ ์ฆ๊ฐ์ํค๋ ํจ์๋ฅผ ์์ฑํด ์ค ์ ์์
์ฐธ๊ณ ์ฌ์ดํธ : https://stackoverflow.com/questions/26252432/how-do-i-set-a-auto-increment-key-in-realm
func incrementID() -> Int {
let realm = try! Realm()
if let next = realm.objects(Customer.self).sorted(byKeyPath: "idx").last?.idx {
return next + 1
} else {
return 1
}
}
ํ ์ค์ฉ ์ดํด๋ณด๋ฉด
let realm = try! Realm()
- realm๊ฐ์ฒด๋ฅผ ์ป์ด์ด
realm.objects(Customer.self).sorted(byKeyPath: "idx")
- Customer์ ํ์ฌ Object๋ฅผ ์์๋ฐ๊ณ ์๋ ํด๋์ค๋ก์, realm ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๊ธฐ ์ค์ค๋ก์ ํ์ ์ผ๋ก ์ง์ ๋ ๊ฐ์ฒด๋ค์ ๊ฐ์ง๊ณ ์์ idx ์์ผ๋ก ์ํ ํด์ค
realm.objects(Customer.self).sorted(byKeyPath: "idx").last?.idx
- ๊ฐ์ฅ ๋ง์ง๋ง ๊ฐ์ฒด์ id๋ฅผ ๊ฐ์ง๊ณ ์ด
- ์ถ์ฒ ์ฌ์ดํธ์์๋ last๊ฐ ์๋ first๋ก ๋์ด ์์ด์ last๋ก ๋ฐ๊พธ์ด์ค์ผ ํจ. ์ด์ ๋ ์ฒซ ๋ฒ์งธ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๊ณ ๋๋ฉด ์ํ ํ ๋๋ง๋ค ๊ฐ์ฅ first ๊ฐ์ธ ์ฒซ๋ฒ์งธ ์ ์ฅํ ๊ฐ์ฒด์ idx๋ฅผ ์กฐํํ๋ฏ๋ก ๋ ๋ฒ์งธ ๊ฐ์ฒด๋ถํฐ ์ค๋ณต๋๋ ํ์์ด ๋ฐ์ํจ -> primaryKey๋ก ์ง์ ๋์ด ์ค๋ณต์ ํ์ฉํ์ง ์์ผ๋ฏ๋ก ์๋ฌ๋ฐ์
} else {
return 1
}
- ๋ง์ฝ ๊ฐ์ด ์๋ค๋ฉด 1์ ๋ฆฌํดํ๊ฒ ๋๋๋ฐ ์ด๋ ์ฒ์ ์ ์ฅ๋ ๊ฐ์ฒด์ ๋ํด ๊ธฐ์กด์ ์ ์ฅ๋ ๊ฐ์ฒด๊ฐ ์์ผ๋ฏ๋ก else๋ฌธ์ ํ๊ฒ๋จ
let customer = Customer()
customer.idx = customer.incrementID()
- ์ฌ์ฉ์์๋ realm ๋ชจ๋ธ์ ์ ์ฅํ ๋ Customer ๊ฐ์ฒด์ idx๊ฐ์ ์ง์ ์ incrementID()๋ฅผ ํ์ฉ
์ฃผ์ ์ฌํญ
let customer = Customer()
customer.idx = customer.incrementID()
customer.name = "์ ์ธ์"
let customer2 = Customer()
customer2.idx = customer.incrementID()
customer2.name = "๋ฌธ์ธ์"
let customer3 = Customer()
customer3.idx = customer.incrementID()
customer3.name = "์ฌ์ธ์"
try! realm.write {
realm.add(customer)
realm.add(customer2)
realm.add(customer3)
}
- ์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๊ฑฐ๋ for ๋ฌธ์ ์ด์ฉํด์ ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ค realm ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ add ์ํค๊ฒ ๋๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํจ (๋ฐํ์์ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๊ผญ ์ฃผ์ํด์ผํจ)
- incrementID() ๋ฉ์๋๋ฅผ ํ์ธํ๋ฉด ์ ์ ์๋๋ฐ, ์ด ๋ฉ์๋๋ฅผ ์คํํ๊ฒ ๋๋ฉด ํ์ฌ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๋ถ๋ฌ์จ ๋ค ๊ทธ ์ค ๋ง์ง๋ง ๊ฐ์ฒด์ primarykey๋ฅผ ์กฐํํ๊ฒ ๋์ด ์์
- ์ด 2๊ฐ๊ฐ ์ ์ฅ๋์ด ์๋๋ฐ, ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ค realm ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ์ง ์์๋ค๋ฉด ์์ง ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๊ฐ์ฒด์ ๊ฐฏ์๋ 2๊ฐ์
- ๋ฐ๋ผ์ ์ ์ฝ๋์์ customer, customer2, customer3์ idx๋ ๋ชจ๋ 3์ผ๋ก ๊ฐ๊ณ , primaryKey๋ก ์ง์ ๋์์ผ๋ฏ๋ก ๊ณ ์ ํ ๊ฐ์ ๊ฐ์ง์ง ์์ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋จ.
>>> ํ๋ฆฌ๊ฑฐ๋ ์ด์ํ ์ ์ด ์๋ค๋ฉด ์ธ์ ๋ ๋๊ธ ๋ถํ๋๋ ค์๐๐ป
728x90
๋ฐ์ํ
'๐ iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[RealmSwift] ๊ฐ์ฒด ์กฐํํ๊ธฐ (0) | 2022.10.02 |
---|---|
[RealmSwift] LinkingObjects์ Realm Studio (0) | 2022.10.02 |
[RealmSwift] ๋ฐ์ดํฐ ๋ชจ๋ธ์ enum์ผ๋ก ํ์ ์ง์ ํ๊ธฐ (0) | 2022.10.02 |
[iOS/Swift] WKWebView์์ Scheme๊ณผ Query๋ก web๊ณผ communicationํ๊ธฐ (0) | 2022.09.26 |
[iOS/Swift] WKWebView URL ๋ก๋ ํ๊ธฐ, Request ์ค์ ํ๊ธฐ (0) | 2022.09.26 |
๋๊ธ