2016-05-10 11 views
2

dies auf Xcode auf einem Spielplatz Versuch 7.3.1 gibt mir Kompilierungsfehler:Kann nicht Initialisierer für Typ aufrufen ‚<Any> Ergebnis‘ mit einem Argument Liste vom Typ ‚(int, int)‘ auf Xcode 7.3.1

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

Auf Xcode 7.3 läuft es aber gut. Dies ist der Code:

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) 

Irgendwelche Ideen? Wurde der Xcode 7.3.1-Compiler strenger?

Antwort

1

nicht sicher, was für den Compiler geändert, aber imho sollten Sie die explizite Result<Any> sowieso sinken und bleiben generic:

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

Functions - Omitting External Parameters können Sie in Verständnis helfen, nehme ich an.

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)