[swift-users] Optional chaining and String properties

Saagar Jha saagar at saagarjha.com
Mon Aug 1 13:09:20 CDT 2016


Saagar Jha

This isn’t quite how optional chaining in Swift works; see the Swift Programming Guide <https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/OptionalChaining.html>, specifically “Linking Multiple Levels of Chaining". Basically, `s?.characters.count` works because `s.characters` isn’t Optional. You only use ? on properties that are Optional.

> On Aug 1, 2016, at 10:26, Stephen Schaub via swift-users <swift-users at 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 at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20160801/e2a20861/attachment.html>


More information about the swift-users mailing list