- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
当由于无效输入而无法初始化对象时,可以使用“failable init”。
init?(s:String) {
if s.isEmpty {
return nil
}
// now set up instance vars
}
然后你可以这样做:
var x:Foo = ""
if x == nil { blah blah
但是如果您遵守 StringLiteralConvertible 协议(protocol)并实现这 3 个初始化,您就不能有一个失败的初始化。
我的问题:使用 StringLiteralConvertible 时如何检查无效输入?
这是一个 gist如果您从未使用过 StringLiteralConvertible,那么这 3 个 init 中的一个。
最佳答案
如果使用 StringLiteralConvertible,则可以将文字字符串分配给变量:
var x: Foo = "test"
您提供的任何字符串都可以,只要它是有效的字符串即可。如果不是字符串:
var x: Foo = 1
或者它是一个格式错误的字符串:
var x: Foo = test"
它不会通过编译,因此可失败的初始化程序将毫无用处。
但是如果你所说的有效是指取决于字符串的内容,那么你是对的。文字必须在语法上正确且具有预期的类型,以便在使用它的上下文中被视为有效,我认为没有办法覆盖它。
关于swift - StringLiteralConvertible 和 failable init,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28501071/
当尝试像这样在枚举中采用 StringLiteralConvertible 时: enum Component: StringLiteralConvertible { case Static(
我在尝试符合 StringLiteralConvertible 时遇到了一些奇怪的事情: class Person: StringLiteralConvertible { var name =
我正在尝试将存储为 CKAssets 的图片添加到 Collection View 中的数组中,但是我要恢复图像的查询给了我一个我无法弄清楚的错误。谁能帮帮我? 我的代码是: class Query:
根据这个post从 NSHipster 中,我们扩展了 NSURL 类以使用如下文字初始化 NSURL 对象: // the following is a full fledged NSURL obj
Swift 的 super 新手,所以请多多包涵。 我在 REPL 中,尝试我认为是一个简单的数据结构,如下: var stuff = [ [ "id" : "A9AD6748
我试图在 swift 中创建字典,但出现错误。我尝试通过添加“?”来展开变量。不确定创建字典的正确方法是什么 class Event: NSObject { // When I remove the
当由于无效输入而无法初始化对象时,可以使用“failable init”。 init?(s:String) { if s.isEmpty { return nil }
我试图在天气应用程序中解析 json,但遇到了一个我无法克服的障碍。 我确实在以下代码中收到错误消息“Type 'int' does not conform to Protocol 'StringLi
当我尝试运行下面的代码时出现此错误: Cannot invoke 'init' with argument list of type (id:StringLiteralConvertible,host
我在制作 NSDictionary 以获取我的 CoreData 模型中的对象时遇到问题。 let moc:NSManagedObjectContext = SwiftCoreDataHelper.m
我已经实现了 StringLiteralConvertible,它扩展了 ExtendedGraphemeClusterLiteralConvertible。看起来它也希望我实现它。但是,当我这样做时
在 A 类中我有这个变量: var collectionElement : PFObject? 然后我需要调用一个使用它的方法。但在我想检查它是否为零之前。所以我做了类似的事情: if collec
我是一名长期的 Obj-C 开发人员,但和其他人一样,我是 Swift 的新手,并且对这个问题摸不着头脑。我正在尝试转换用 Obj-C 编写的旧教程。 我有一个像这样声明的“动物”类: class A
在 iOS 上运行的编程语言中的泛型?不必多说了,把我的钱拿去! 这是我的实验代码(这是在 Playground 上运行的): class Foo { var value:GenericTyp
类型[SubscriptType]不符合协议(protocol)StringLiteralConvertible // JsonRequest.swift class JsonRequest { va
我刚刚更新: xcodeVersion 6.3 (6D570) Swift 1.2 昨晚把我的话搞砸了,显然他们对 Swift 或 Parse 进行了一些更改。 我很困惑,我只是不知道如何解决这个问题
我正在尝试使用 初始化字典常量 ["updateType" : "moveRow", "data" : rows]. rows 是一个数组。我的情况是: let update = ["updateT
我有一个类,它具有返回某个文件路径的功能: func getArchivePathFor(fileName: String!) -> String { var paths = NSSe
Here是关于同一主题的较旧问题,但它适用于 Swfit 1.0。在 Swift 1.1 中,StringLiteralConvertible 协议(protocol)已更改为使用初始化器而不是类方法
Here是关于同一主题的较旧问题,但它适用于 Swfit 1.0。在 Swift 1.1 中,StringLiteralConvertible 协议(protocol)已更改为使用初始化器而不是类方法
我是一名优秀的程序员,十分优秀!