Swift 2.0 - 传递一个元组结构来运行

时间:2016-04-26 04:54:27

标签: swift struct tuples nserror

我想将一个元组结构传递给一个函数,我得到了未知元组字段的错误:

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)
       // ...
    }
}

错误是:

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

我认为MyClassError中出错的原因是我没有将error参数转换为元组?我怎样才能做到这一点?还是其他任何原因?

感谢。

1 个答案:

答案 0 :(得分:3)

我花了一段时间才弄清楚错误的位置。

很容易错过它。

发生错误是因为参数 - errorMyClassConstants.Error的实例。使用此实例,您只能访问该类型的实例方法或属性。但是,您的MyClassConstants.Error没有实例属性!它只包含静态属性!

您需要知道ERROR1ERROR2不属于MyClassConstants.Error类型。它们的类型为(code: Int, description: String)

所以是啊......

你得到的第二个错误是:

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

由于ERROR1不属于MyClassConstants.Error类型,因此无法将其传递给方法。

如何解决这个问题:

嗯,这是不言自明的代码:

// 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!!
}