2016-04-26 17 views
1

を機能させるタプル構造体を渡し、私は関数にタプルの構造体を渡したい、と私は未知のタプルフィールドのエラーました:エラーがある2.0スウィフト -

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パラメータをタプルにキャストしていないと思いますか?どうやってやるの?それとも他の理由?

ありがとうございました。

答えて

3

実際にエラーがどこにあるかを理解するまでには、しばらく時間がかかりました。

これはとても簡単です。

パラメータ-がMyClassConstants.Errorのインスタンスであるため、エラーが発生します。このインスタンスを使用すると、インスタンスのメソッドまたはそのタイプのプロパティにしかアクセスできません。ただし、MyClassConstants.Errorにはインスタンスプロパティはありません。静的なプロパティのみが含まれています。

ERROR1ERROR2は、タイプがMyClassConstants.Errorではありません。それらはタイプ(code: Int, description: String)です!

そうそう...あなたが得る

2番目のエラーはである:ERROR1はタイプMyClassConstants.Errorではないので、それはメソッドに渡すことはできません

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

。この修正方法

さて、ここでは自明コードは次のとおりです。

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

おかげでたくさん、@Sweeper。あなたの投稿はクリスタルクリアです! – quanguyen