调用初始化程序时没有完全匹配
No exact matches in call to intializer
我最近切换到 Xcode 12 并开始出现 Xcode 11 中没有的错误。该错误与一个扩展相关,该扩展显示 没有完全匹配在调用初始化器 下面是代码 -
public typealias UpdateBlock<T> = (_ object: T?) -> Void
protocol ModelMappeable {
func map(_ values: JSON, realm: Realm?)
}
extension ModelMappeable where Self: BaseModel {
static func getOrCreate(realm: Realm, values: JSON?, updates: UpdateBlock<Self>?) -> Self {
var object: Self!
if let primaryKey = values?["_id"].string {
if let newObject = realm.object(ofType: Self.self, forPrimaryKey: primaryKey as AnyObject) {
object = newObject
}
}
if object == nil {
object = self()
}
if let values = values {
object.map(values, realm: realm)
}
updates?(object)
return object
}
}
从初始化程序中删除覆盖后出现以下错误 -
您可以为 BaseModel
提供一个 required
初始化器来解决这个问题:
class BaseModel: Object {
@objc dynamic var identifier: String?
required override init() {
super.init()
}
}
并更改:
if object == nil {
object = self()
}
在getOrCreate(realm:values:updates:)
函数中,为此:
if object == nil {
object = Self()
}
更新: 原来这在SwiftRealm以前的版本里没那么容易
具体来说,您需要重写 3 个以上的初始化程序才能完成您想要的:
class BaseModel: Object {
@objc dynamic var identifier: String?
required init() {
super.init()
}
override init(value: Any) {
super.init(value: value)
}
required init(realm: RLMRealm, schema: RLMObjectSchema) {
super.init(realm: realm, schema: schema)
}
required init(value: Any, schema: RLMSchema) {
super.init(value: value, schema: schema)
}
}
我最近切换到 Xcode 12 并开始出现 Xcode 11 中没有的错误。该错误与一个扩展相关,该扩展显示 没有完全匹配在调用初始化器 下面是代码 -
public typealias UpdateBlock<T> = (_ object: T?) -> Void
protocol ModelMappeable {
func map(_ values: JSON, realm: Realm?)
}
extension ModelMappeable where Self: BaseModel {
static func getOrCreate(realm: Realm, values: JSON?, updates: UpdateBlock<Self>?) -> Self {
var object: Self!
if let primaryKey = values?["_id"].string {
if let newObject = realm.object(ofType: Self.self, forPrimaryKey: primaryKey as AnyObject) {
object = newObject
}
}
if object == nil {
object = self()
}
if let values = values {
object.map(values, realm: realm)
}
updates?(object)
return object
}
}
从初始化程序中删除覆盖后出现以下错误 -
您可以为 BaseModel
提供一个 required
初始化器来解决这个问题:
class BaseModel: Object {
@objc dynamic var identifier: String?
required override init() {
super.init()
}
}
并更改:
if object == nil {
object = self()
}
在getOrCreate(realm:values:updates:)
函数中,为此:
if object == nil {
object = Self()
}
更新: 原来这在SwiftRealm以前的版本里没那么容易
具体来说,您需要重写 3 个以上的初始化程序才能完成您想要的:
class BaseModel: Object {
@objc dynamic var identifier: String?
required init() {
super.init()
}
override init(value: Any) {
super.init(value: value)
}
required init(realm: RLMRealm, schema: RLMObjectSchema) {
super.init(realm: realm, schema: schema)
}
required init(value: Any, schema: RLMSchema) {
super.init(value: value, schema: schema)
}
}