【问题标题】:Extra argument in call, Convenience Initializers调用中的额外参数,便利初始化器
【发布时间】:2017-11-03 06:24:38
【问题描述】:

我在这里做错了什么?一切似乎都很好。函数签名是正确的。我看不出为什么parent 会是一个额外的参数。

import CloudKit
import CoreLocation

public enum OrderDirection {
    case ascending, descending
}

open class OrderBy {
    var key: String = ""
    var direction: OrderDirection = .descending
    var parent: OrderBy? = nil

    open var sortDescriptor: NSSortDescriptor {
        return NSSortDescriptor(key: self.key, ascending: self.direction == .ascending)
    }

    public convenience init(key: String, direction: OrderDirection, parent: OrderBy? = nil) {
        self.init()
        self.key = key
        self.direction = direction
        self.parent = parent
    }

    open func Ascending(_ key: String) -> Ascending {
        return Ascending(key, parent: self)
    }

    open func Descending(_ key: String) -> Descending {
        return Descending(key, parent: self)
    }

    open var sortDescriptors: [NSSortDescriptor] {
        return self.parent?.sortDescriptors ?? [] + [self.sortDescriptor]
    }
}

open class Ascending: OrderBy {
    public convenience required init(key: String, parent: OrderBy? = nil) {
        self.init(key: key, direction: .ascending, parent: parent)
    }
}

open class Descending: OrderBy {
    public convenience required init(key: String, parent: OrderBy? = nil) {
        self.init(key: key, direction: .descending, parent: parent)
    }
}

编辑:从屏幕截图切换到实际代码。

【问题讨论】:

  • “Ascending”既是方法名又是类名,不是个好主意……
  • @MartinR 道歉。我会解决的。

标签: swift convenience-methods


【解决方案1】:

看起来该函数正在尝试调用自身,因此它不希望出现在 Ascending/Descending 类的 init 中的 parent 参数。我建议更改函数的名称,以便调试器更清楚您希望使用哪个函数。将第一个字母改为小写就足够了。

如果它们具有相同的范围,我认为您不会遇到相同的问题。

【讨论】:

    【解决方案2】:

    方法名以小写开头!!!

    修复:

    open func ascending(_ key: String) -> Ascending {
        return Ascending(key: key, parent: self)
    }
    
    open func descending(_ key: String) -> Descending {
        return Descending(key: key, parent: self)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多