[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