【问题标题】:Cannot Invoke Initializer for type 'Int' with an argument list of type '()'无法使用类型为“()”的参数列表为类型“Int”调用初始化程序
【发布时间】:2016-06-14 11:17:37
【问题描述】:

我在项目中使用CVCalendar,并且我已将 Xcode 更新为 8.0 Beta。问题是我在一个文件中收到错误消息:

1) 无法使用类型参数列表为类型“Int”调用初始化程序 '()'

2) 参数标签 '(body:)' 不匹配任何可用的重载

// MARK: - SequenceType

private var storage = [T]()

extension CVSet: Sequence {
    public func makeIterator() -> AnyIterator<T> {
        var power = 0
        let nextClosure : () -> T? = {

            (power < self.count) ? self.storage[Int(power += 1)] : nil //Getting error here self.storage[Int(power += 1)]
        }
        return AnyIterator(body: nextClosure)
    }
}

【问题讨论】:

    标签: ios swift3


    【解决方案1】:

    += 运算符有一个类型,例如(Int, Int) -&gt; _,这意味着它的返回类型是_ / () / void。即,该函数不返回任何内容。

    因此,表达式Int(power += 1)Int() 相同,无效。

    这样做是为了防止隐藏在大型表达式中的讨厌的副作用。试试吧:

    if (power < self.count) {
        power += 1
        return self.storage[power]
    }
    else {
        return nil
    }
    

    【讨论】:

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