2016-04-26 9 views
1

ich eine Struktur von Tupeln an eine Funktion übergeben möchten, und ich habe den Fehler unbekannter Tupel Felder:Swift 2.0 - pass ein Tupel Struktur funktionieren

import UIKit 

struct MyClassConstants { 
    static let DOMAIN = "MyClassDomain" 

    struct Error { 
     static let ERROR1 = (code: -1, description: "Error1 description") 
     static let ERROR2 = (code: -2, description: "Error2 description") 
    } 
} 

extension NSError { 
    public class func MyClassError(error: MyClassConstants.Error) -> NSError { 
     return NSError(domain: MyClassConstants.DOMAIN, code: error.code, userInfo: ["description": error.description]) // error here!! 
    } 
} 

class MyClass: NSObject { 
    // some properties 
    func doSomething() { 
     let error = NSError.MyClassError(MyClassConstants.Error.Error1) 
     // ... 
    } 
} 

Der Fehler ist:

Value of type "MyClassConstants.Error" has no member 'code'. 

Ich denke, der Grund des Fehlers in MyClassError ist, habe ich nicht error Parameter zu einem Tupel gegossen? Wie kann ich das machen? Oder irgendwelche anderen Gründe?

Danke.

Antwort

3

Es dauerte eine Weile, bis ich herausgefunden hatte, wo der Fehler liegt.

Es ist so einfach, es zu verpassen. Der Fehler tritt auf, weil der Parameter error eine Instanz MyClassConstants.Error ist. Mit dieser Instanz können Sie nur auf Instanz Methoden oder Eigenschaften dieses Typs zugreifen. Ihre MyClassConstants.Error hat jedoch keine Instanzeigenschaften! Es enthält nur statische Eigenschaften!

Sie müssen wissen, dass ERROR1 und ERROR2 nicht vom Typ MyClassConstants.Error sind. Sie sind vom Typ (code: Int, description: String)!

So yeah ...

Der zweite Fehler, die Sie erhalten unter:

let error = NSError.MyClassError(MyClassConstants.Error.Error1) 

Da ERROR1 nicht vom Typ ist MyClassConstants.Error, sie nicht in die Methode übergeben werden kann.

Wie dieses Problem zu beheben:

Nun, hier ist die selbsterklärend Code:

// Change MyClassError method to this: 
public class func MyClassError(error: (code: Int, description: String)) -> NSError { 
    return NSError(domain: MyClassConstants.DOMAIN, code: error.code, userInfo: ["description": error.description]) // error here!! 
} 
+0

Vielen Dank, @Sweeper. Dein Beitrag ist kristallklar! – quanguyen