Swift 2.0 - 将元组结构传递给函数

Posted

技术标签:

【中文标题】Swift 2.0 - 将元组结构传递给函数【英文标题】:Swift 2.0 - pass a tuple struct to function 【发布时间】:2016-04-26 04:54:27 【问题描述】:

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

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】:

实际上我花了一段时间才弄清楚错误在哪里。

很容易错过。

发生错误是因为参数 - errorMyClassConstants.Error 的一个实例。使用此实例,您只能访问该类型的 instance 方法或属性。但是,您的 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!!

【讨论】:

以上是关于Swift 2.0 - 将元组结构传递给函数的主要内容,如果未能解决你的问题,请参考以下文章

将元组作为命令行参数传递

如何将元数据谷歌语音传递给文本 api - swift ios

如何将元组扩展为可变参数模板函数的参数?

Spark 2.0:如何将元组的 RDD 转换为 DF [重复]

如何创建将二叉树转换为元组的函数?

Swift 值类型 和 引用类型的区别