检查init方法的参数

时间:2014-09-02 07:22:49

标签: class swift initialization

我面临着一个有点愚蠢的问题,试图编写我的第一个快速课程。 我正在为我的类编写一个init方法,并且我想(引发异常)/(以某种方式做某事)在传递给初始化程序的参数错误时报告错误。 我的课很简单:

class Phrase: NSObject {
    let name : String
    let voices : Array<Voice>
    init(name: String, voices: Array<Voice>){
        if (name == "" || voices.count == 0){
          //do something!
        }
        self.name = name
        self.voices = voices
    }
}

提前谢谢!

2 个答案:

答案 0 :(得分:2)

不要使用init - 如果参数无效,请使用可返回nil的类函数:

class Phrase: NSObject {
    var name : String
    var voices : Array<Voice>

    init() {
        self.name = "something safe"
        self.voices = [Voice]()
    }

    class func phraseOrNil(name: String, voices: Array<Voice>) -> Phrase? {
        if (name == "" || voices.count == 0){
            let p = Phrase()
            p.name = name
            p.voices = voices
            return p
        } else {
            return nil
        }
    }
}

...然后你可以在主代码中优雅地失败(或者如果你真的想要抛出异常,如上所示)。另请参阅How should I handle parameter validation Swift,但这并不能解决您的例外问题。

另请注意,由于我们需要更改其值,因此我将let声明更改为var

答案 1 :(得分:0)

这是我最喜欢的选项:

fatalError("This is an overreaction.")

你也可以这样做:

NSException(name: "Invalid Arguments", reason: "Arguments are empty", userInfo: nil).raise()

有关此over here

的更多信息