【问题标题】:Xcode 9 with Swift 4 Extra argument in call调用中带有 Swift 4 额外参数的 Xcode 9
【发布时间】:2017-10-25 18:48:34
【问题描述】:

我使用 XCode 8.3swift 3.1,现在我用 swift 4 更新到 Xcode 9在我使用 RXSwift 的某些类中,我有以下错误编译器日志:

class petViewModel {
    var lastPetID: Int = 0
    var refreshing = Variable<Bool>(false)
    var vaccines: Results<vaccines>? = nil
    let error = Variable<(Int,String)>(0,"") // Extra argument in call
    let changes = Variable<([Int], [Int], [Int])>([Int](), [Int](), [Int]())  // Extra argument in call
    var firstLoad = Variable<Bool>(false)

    // and more code bla bla bla

}

使用 RXSwift 实现它的最佳方式是什么?之前编译我没有任何问题,请帮忙?

【问题讨论】:

    标签: ios11 xcode9 swift4 rx-swift


    【解决方案1】:

    你可以这样使用:

    let change1 = Variable<[Int]>([Int]())
    let change2 = Variable<[Int]>([Int]())
    let change3 = Variable<[Int]>([Int]())
    
    let changes = Observable.combineLatest(change1.asObservable(), change2.asObservable(), change3.asObservable())
    

    【讨论】:

    • 感谢@Vini App 的回答,但现在向我显示一个编译器错误:“不能在属性初始化程序中使用实例成员'change1';属性初始化程序在'self'可用之前运行”
    【解决方案2】:

    我在GitHub 中收到了用户@biboran 的回复,并且 问题是 swift 4.0 目前不支持元组转换。

    我的变量未编译,因为我将其声明为元组并将其作为可变参数传递。只需将其包装成一个元组:

    let changes = Variable<([Int], [Int], [Int])>(
      ( // <-- this is a tuple I'm missing
        [Int](), 
        [Int](), 
        [Int]()
      ) // <-- this is a tuple I'm missing
    )
    

    对于我的 combineLatest,我必须将参数包装到一个集合中(例如使用文字)

    Observable.combineLatest([
      change1.asObservable(), 
      change2.asObservable(), 
      change3.asObservable()
    ])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      相关资源
      最近更新 更多