Swift编译器为什么会抛出:“找不到接受提供的参数的'<'的重载”

布伦丁

我在一些新的Swift代码中使用FCModel来保留我的模型数据。在我的架构管理/迁移代码中,当我对一个Int执行逻辑比较时,我得到一个编译时错误。我无法确定这里是否存在语法或类型错误,或者是否发现了编译器错误。

这是有效的逻辑运算吗?我错过了一个错误吗?

Error: AppDelegate.swift:53:30: Could not find an overload for '<' that accepts the supplied arguments

相关代码:

var schemaVersion: Int = (settings["schemaVersion"] as String).toInt()!

FCModel.openDatabaseAtPath(databasePath, withSchemaBuilder: { database, schemaVersion in
    database.crashOnErrors = true
    database.traceExecution = true
    database.beginTransaction()

// 'failedAt' closure removed for brevity

if schemaVersion < 1 { // ERROR HAPPENS HERE
    if !database.executeUpdate("SQL STATEMENT HERE", withArgumentsInArray: nil)
    { failedAt(1) }

    schemaVersion = 1
}

更新 openDatabaseAtPath()定义为:

func openDatabaseAtPath(path: String!, withSchemaBuilder schemaBuilder: ((FMDatabase!, CMutablePointer<CInt>) -> Void)!)

更新#2在下面的Sulthan的帮助下,我认为我已经缩小了问题的出处,但我不知道为什么。同样,我认为这可能是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
    }))
    ...
})

当我调试并在Xcode中使用REPL时,会发生一些有趣的事情。当执行在withSchemaBuilderdatabase中时不为nil,并且与上面创建的对象匹配。schemaVersion不是公认的标识符:

error: use of unresolved identifier 'schemaVersion'
schemaVersion

和:

$R0: FMDatabase! = {
  Some = {
    NSObject = {
      isa = FMDatabase
    }
    _db =
    _databasePath = @"/Users/brian/Library/Developer/CoreSimulator/Devices/25115FDE-0DA8-4F2B-B4E5-5A0600720772/data/Containers/Data/Application/579A64D7-6C6B-4690-B503-2CA5B4229D55/Documents/userData.sqlite"
    _logsErrors = YES
    _crashOnErrors = NO
    _traceExecution = NO
    _checkedOut = NO
    _shouldCacheStatements = NO
    _isExecutingStatement = NO
    _inTransaction = NO
    _maxBusyRetryTimeInterval = 2
    _startBusyRetryTime = 0
    _cachedStatements = nil
    _openResultSets = 0 objects
    _openFunctions = nil
    _dateFormat = nil
  }
}

有什么想法吗?

苏尔坦

报关单

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 <CInt>

从逻辑上讲,您不能直接将其与Int1比较如果确实是CMutablePointer<Int>,则应使用类似以下内容的代码:

schemaVersion.withUnsafePointer { unsafeSchemaVersion in
    if unsafeSchemaVersion.memory < 1

    ...

    unsafeSchemaVersion.memory = 1
}

这等效于Obj-C中的以下内容:

 if (*schemaVersion < 1) {
     ...
     *schemaVersion = 1;
 }

如果要引用在闭包外部定义的变量,则应重命名或重命名闭包参数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Swift:找不到'|'的重载 接受提供的参数

来自分类Dev

Swift:找不到接受提供的参数的''的重载

来自分类Dev

Swift:找不到接受提供的参数的'>'的重载

来自分类Dev

找不到接受提供的参数的'^'的重载

来自分类Dev

找不到接受提供的参数的'/'的重载

来自分类Dev

找不到接受提供的参数的'println'的重载

来自分类Dev

找不到接受提供的参数的'-'的重载

来自分类Dev

找不到接受提供的参数的'logInWithPermissions'的重载

来自分类Dev

找不到接受提供的参数的'*'的重载

来自分类Dev

找不到接受提供的参数的'*'的重载

来自分类Dev

找不到接受提供的参数的'/'的重载

来自分类Dev

找不到接受提供的参数的'println'的重载

来自分类Dev

找不到接受提供的参数的'POST'的重载

来自分类Dev

找不到接受提供的参数的“ init”的重载

来自分类Dev

找不到接受提供的参数的“ +”重载

来自分类Dev

找不到接受提供的参数SWIFT的“ init”的重载

来自分类Dev

Swift:找不到接受提供参数的转换重载

来自分类Dev

Swift:找不到接受提供参数的转换重载

来自分类Dev

Swift:UIImage-找不到接受提供的参数的'init'的重载

来自分类Dev

Swift错误:找不到接受提供的参数的'-'的重载

来自分类Dev

编译器找不到重载

来自分类Dev

找不到'*'的重载,该重载接受提供的参数

来自分类Dev

在Swift中检查网络状态,找不到'〜='的重载,该重载接受提供的参数

来自分类Dev

Sort NSArray Swift错误:找不到接受提供的参数的'sort'的重载

来自分类Dev

Swift无法找到'+ ='的重载,该重载接受提供的参数

来自分类Dev

Swift:无法找到接受提供的参数的''的重载

来自分类Dev

为什么方法重载或枚举标志定义会触发 gcc7.2 编译器警告?

来自分类Dev

为什么编译器在重载时停止名称查找?

来自分类Dev

为什么编译器选择了错误的方法重载?

Related 相关文章

  1. 1

    Swift:找不到'|'的重载 接受提供的参数

  2. 2

    Swift:找不到接受提供的参数的''的重载

  3. 3

    Swift:找不到接受提供的参数的'>'的重载

  4. 4

    找不到接受提供的参数的'^'的重载

  5. 5

    找不到接受提供的参数的'/'的重载

  6. 6

    找不到接受提供的参数的'println'的重载

  7. 7

    找不到接受提供的参数的'-'的重载

  8. 8

    找不到接受提供的参数的'logInWithPermissions'的重载

  9. 9

    找不到接受提供的参数的'*'的重载

  10. 10

    找不到接受提供的参数的'*'的重载

  11. 11

    找不到接受提供的参数的'/'的重载

  12. 12

    找不到接受提供的参数的'println'的重载

  13. 13

    找不到接受提供的参数的'POST'的重载

  14. 14

    找不到接受提供的参数的“ init”的重载

  15. 15

    找不到接受提供的参数的“ +”重载

  16. 16

    找不到接受提供的参数SWIFT的“ init”的重载

  17. 17

    Swift:找不到接受提供参数的转换重载

  18. 18

    Swift:找不到接受提供参数的转换重载

  19. 19

    Swift:UIImage-找不到接受提供的参数的'init'的重载

  20. 20

    Swift错误:找不到接受提供的参数的'-'的重载

  21. 21

    编译器找不到重载

  22. 22

    找不到'*'的重载,该重载接受提供的参数

  23. 23

    在Swift中检查网络状态,找不到'〜='的重载,该重载接受提供的参数

  24. 24

    Sort NSArray Swift错误:找不到接受提供的参数的'sort'的重载

  25. 25

    Swift无法找到'+ ='的重载,该重载接受提供的参数

  26. 26

    Swift:无法找到接受提供的参数的''的重载

  27. 27

    为什么方法重载或枚举标志定义会触发 gcc7.2 编译器警告?

  28. 28

    为什么编译器在重载时停止名称查找?

  29. 29

    为什么编译器选择了错误的方法重载?

热门标签

归档