我面临着一个有点愚蠢的问题,试图编写我的第一个快速课程。 我正在为我的类编写一个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 :(得分: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
的更多信息