2014-09-02 56 views
0

我正面临一个有点愚蠢的问题,试图编写我的第一个快速类。 我正在为我的类编写一个init方法,并且我想(引发异常)/(以某种方式做某件事)在传递给初始值设定项的参数错误时报告错误。 我的课程很简单:检查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 
    } 
} 

提前致谢!

+0

[正确的方法来处理初始化失败]可能的重复(http://stackoverflow.com/questions/24295740/proper-way-to-handle-a-fail-to-init) – 2014-09-02 07:39:10

+0

可能的重复af [我应该如何处理参数验证Swift](http://stackoverflow.com/questions/24250363/how-should-i-handle-parameter-validation-swift) – 2014-09-02 07:39:50

回答

0

这里是我最喜欢的选项:

fatalError("This is an overreaction.") 

你也可以这样做:

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

更多关于此over here

+0

第一个是如此BRUTAL;) 第二个是例外,但我无法在Swift中管理它,并且因为这想成为一个完整的快速项目,它似乎有点无用! 我会去的第一个!非常感谢你! – tmnd91 2014-09-02 07:38:00

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

最重要的是,我会建议使用NSError,为您的代码的用户提供更多信息。 – Atomix 2014-09-02 07:43:48