Ios 为什么Swift编译器会抛出“";找不到'<';接受提供的参数的;
我在一些新的Swift代码中使用FCModel来保存我的模型数据。在我的模式管理/迁移代码中,当我对Int执行逻辑比较时,会出现编译时错误。我无法判断这里是否存在语法或类型错误,或者是否发现了编译器错误 这是有效的逻辑操作吗?我错过了一个错误吗Ios 为什么Swift编译器会抛出“";找不到'<';接受提供的参数的;,ios,swift,Ios,Swift,我在一些新的Swift代码中使用FCModel来保存我的模型数据。在我的模式管理/迁移代码中,当我对Int执行逻辑比较时,会出现编译时错误。我无法判断这里是否存在语法或类型错误,或者是否发现了编译器错误 这是有效的逻辑操作吗?我错过了一个错误吗 Error: AppDelegate.swift:53:30: Could not find an overload for '<' that accepts the supplied arguments 更新#2 在苏丹的帮助下,我想我已经缩小
Error: AppDelegate.swift:53:30: Could not find an overload for '<' that accepts the supplied arguments
更新#2
在苏丹的帮助下,我想我已经缩小了问题的范围,但我不知道为什么。同样,我认为这可能是Swift中的一个错误
更新代码:
var schemaVersion: Int = 0
let database: FMDatabase = FMDatabase(path: databasePath)
FCModel.openDatabaseAtPath(databasePath, withSchemaBuilder: { (database, schemaVersion: CMutablePointer<CInt>) in
var x:Int = Int(schemaVersion.withUnsafePointer( { (unsafeSchemaVersion: UnsafePointer<CInt>) -> CInt in
return unsafeSchemaVersion.memory
}))
...
})
以及:
有什么想法吗?《宣言》
var schemaVersion: Int = (settings["schemaVersion"] as String).toInt()!
与您的错误无关,因为您正在本地重新定义schemaVersion
:
... withSchemaBuilder: { database, schemaVersion in
该方法定义为
+ (void)openDatabaseAtPath:(NSString *)path
withSchemaBuilder:(void (^)(FMDatabase *db, int *schemaVersion))schemaBuilder;
因此,我假设块中schemaVersion
的类型类似于CMutablePointer
从逻辑上讲,您无法直接将其与Int
(1
)进行比较。如果它真的是一个CMutablePointer
,您应该使用如下内容:
schemaVersion.withUnsafePointer { unsafeSchemaVersion in
if unsafeSchemaVersion.memory < 1
...
unsafeSchemaVersion.memory = 1
}
schemaVersion.withUnsafePointer{unsafeSchemaVersion in
如果unsafeschemaversation.memory<1
...
unsafeSchemaVersion.memory=1
}
这相当于Obj-C中的以下内容:
if (*schemaVersion < 1) {
...
*schemaVersion = 1;
}
if(*schemaVersion<1){
...
*图式厌恶=1;
}
如果要引用在闭包外部定义的变量,应重命名它或重命名闭包参数。声明
var schemaVersion: Int = (settings["schemaVersion"] as String).toInt()!
与您的错误无关,因为您正在本地重新定义schemaVersion
:
... withSchemaBuilder: { database, schemaVersion in
该方法定义为
+ (void)openDatabaseAtPath:(NSString *)path
withSchemaBuilder:(void (^)(FMDatabase *db, int *schemaVersion))schemaBuilder;
因此,我假设块中schemaVersion
的类型类似于CMutablePointer
从逻辑上讲,您无法直接将其与Int
(1
)进行比较。如果它真的是一个CMutablePointer
,您应该使用如下内容:
schemaVersion.withUnsafePointer { unsafeSchemaVersion in
if unsafeSchemaVersion.memory < 1
...
unsafeSchemaVersion.memory = 1
}
schemaVersion.withUnsafePointer{unsafeSchemaVersion in
如果unsafeschemaversation.memory<1
...
unsafeSchemaVersion.memory=1
}
这相当于Obj-C中的以下内容:
if (*schemaVersion < 1) {
...
*schemaVersion = 1;
}
if(*schemaVersion<1){
...
*图式厌恶=1;
}
如果要引用在闭包外部定义的变量,应重命名该变量或重命名闭包参数。Xcode检查器显示定义为
CMutablePointer
的schemaVersion
,它没有定义为属性的内存
。@blundin我在哪里使用schemaVersion.memory
?当我清理名称冲突并专注于我的逻辑时,这对我很有效。谢谢Xcode检查器显示定义为CMutablePointer
的schemaVersion
,它没有定义为属性的memory
。@blundin我在哪里使用schemaVersion.memory
?当我清理名称冲突并专注于我的逻辑时,这对我很有效。谢谢