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

Posted

技术标签:

【中文标题】无法使用类型为“()”的参数列表为类型“Int”调用初始化程序【英文标题】:Cannot Invoke Initializer for type 'Int' with an argument list of type '()' 【发布时间】: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)
    

【问题讨论】:

【参考方案1】:

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

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

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

if (power < self.count) 
    power += 1
    return self.storage[power]

else 
    return nil

【讨论】:

以上是关于无法使用类型为“()”的参数列表为类型“Int”调用初始化程序的主要内容,如果未能解决你的问题,请参考以下文章

Swift:无法使用类型为“(@noescape(Int)抛出-> Bool)”的参数列表调用“过滤器”

如何解决错误:无法调用类型为 `......` 的参数列表类型为 `...` 的初始化程序?

无法使用类型 (Int64, String) 的参数列表调用 setValue

无法使用类型为“”的参数列表调用类型“”的初始化程序

无法将 Int 类型的值转换为预期的参数类型 Bool

无法使用类型为“(字符串)”的参数列表调用“执行选择器”