You can think of this like flatMap: let count = s.flatMap { $0.characters.count } ?? 0 // like s?.characters.count ?? 0 let count = s.flatMap { $0.characters }.flatMap { $0.count } ?? 0 // like (s?.characters)?.count ?? 0
Jacob On Mon, Aug 1, 2016 at 10:26 AM, Stephen Schaub via swift-users < swift-users@swift.org> wrote: > With optional chaining, if I have a Swift variable > > var s: String? > > s might contain nil, or a String wrapped in an Optional. So, I tried this > to get its length: > > let count = s?.characters?.count ?? 0 > > However, the compiler wants this: > > let count = s?.characters.count ?? 0 > > or this: > > let count = (s?.characters)?.count ?? 0 > > My understanding of optional chaining is that, once you start using '?.' > in a dotted expression, the rest of the properties evaluate as optional and > are typically accessed by '?.', not '.'. > > So, I dug a little further and tried this in the playground: > > var s: String? = "Foo" > print(s?.characters) > > The result indicates that s?.characters is indeed an Optional instance, > indicating that s?.characters.count should be illegal. > > Why is s?.characters.count a legal expression? > > > -- > Stephen Schaub > > _______________________________________________ > swift-users mailing list > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users > >
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users