在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编译器变得更严格了吗?
答案 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)