如果由于输入无效而无法初始化对象,则可以使用“failable init”。
init?(s:String) {
if s.isEmpty {
return nil
}
// now set up instance vars
}
然后你可以这样做:
var x:Foo = ""
if x == nil { blah blah
但是你是否符合StringLiteralConvertible协议并实现这3个inits,你就不能有一个可用的init。
我的问题:当你使用StringLiteralConvertible时,如何检查无效输入?
如果你从未使用过StringLiteralConvertible,那么这3个inits是gist。
答案 0 :(得分:0)
如果使用StringLiteralConvertible,则可以将文字字符串分配给变量:
var x: Foo = "test"
您提供的任何字符串都是好的,只要它是有效的字符串即可。如果它不是字符串:
var x: Foo = 1
或者这是一个格式错误的字符串:
var x: Foo = test"
它不会通过编译,因此可用的初始化程序将无用。
但是如果有效则意味着取决于字符串的内容,那么你是对的。文字必须在语法上正确且具有预期的类型才能在使用它的上下文中被认为是有效的,我认为没有办法覆盖它。