无法在Xcode 7.3.1上使用类型为'(int,int)'的参数列表调用类型'Result <any>'的初始值设定项

时间:2016-05-10 08:54:55

标签: swift generics tuples xcode7.3

在Xcode 7.3.1的操场上试试这个给我编译错误:

Cannot invoke initializer for type 'Result<Any>' with an argument list of type '(int,int)' 

在Xcode 7.3上它运行正常。这是代码:

import UIKit
public enum Result<T> {
    case Success(T)
    case Failure(ErrorType)
    public init(_ value: T) {
        self = .Success(value)
    }
    public init(_ error: ErrorType) {
        self = .Failure(error)
    }
}
func handleResult(result: Result<Any>) {
    switch result {
    case .Success(let value):
        print(value)
    case .Failure(let error):
        print(error)
    }
}
let b = Result<Any>((1,2))    //This doesn't work on Xcode 7.3.1
handleResult(b)

有什么想法吗? Xcode 7.3.1编译器变得更严格了吗?

2 个答案:

答案 0 :(得分:1)

不确定编译器有什么变化但是你应该放弃显式Result<Any>并保持通用:

func handleResult<T>(result: Result<T>) {
    switch result {
    case .Success(let value):
        print(value)
    case .Failure(let error):
        print(error)
    }
}

let b = Result((1,2))
handleResult(b)

答案 1 :(得分:1)

Functions - Omitting External Parameters可能会帮助您理解我的想法。

 import UIKit
 public enum Result<T> {
    case Success(T)
    case Failure(ErrorType)
    public init(value: T) {
        self = .Success(value)
    }
    public init(error: ErrorType) {
        self = .Failure(error)
    }
}

func handleResult(result: Result<Any>) {
            switch result {
            case .Success(let value):
                print(value)
            case .Failure(let error):
                print(error)
            }
        }

let b = Result<Any>(value: (1,2))    //This works only on Xcode 7.3.1
        handleResult(b)