Skip to content

couchbaselabs/couchbase-lite-swift-property-wrapper

Repository files navigation

CouchbaseLiteSwiftPropertyWrapper

License

An experiment using Swift's Propery Wrappers to build data model for Couchbase Lite Swift.

Limitation

  • The library is using EnclosingSelf feature which is still in proposal/experimental state.
  • As the `EnclosingSelf feature is used, only Class (not Struct) can use the property wrapper.

Requirements

  • CouchbaseLiteSwift 2.8+

Platforms

  • iOS (9.0+) and macOS (10.11+)
  • XCode 12+

Example

Model

class Person: CBLModel {
    @CBLProperty(key: "name")
    var name: String?
    
    @CBLProperty(key: "address")
    var address: Address?
    
    @CBLProperty(key: "contacts")
    var contacts: [Person]?
    
    @CBLProperty(key: "dependents", defaultValue: 0)
    var dependents: Int
}

class Address: CBLModel {
    @CBLProperty(key: "street")
    var street: String?
}

Usage

let person = Person(with: MutableDocument())
person.name = "Daniel"

let address = Address()
address.street = "1 Main st."
person.address = address

let contact = Person()
contact.name = "James"
person.contacts = [contact]

try person.save(into: self.database)

Document data

[ "name": "Daniel"
  "address": ["street": "1 Main st."]
  "contacts": [
  	["name": "James]
  ]
]

About

Data Model using Property Wrappers for Couchbase Lite Swift

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages