[swift-users] Optional chaining and String properties

Stephen Schaub sschaub at gmail.com
Mon Aug 1 13:17:59 CDT 2016


I understand that the String.characters property is not optional. However,
I am puzzled as to why

s?.characters.count

is legal, but

(s?.characters).count

is not. This seems counterintuitive. Can someone explain the logic or rules
being used here?

Stephen




On Mon, Aug 1, 2016 at 2:09 PM, Saagar Jha <saagar at saagarjha.com> wrote:

>
> 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
>
>
>


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


More information about the swift-users mailing list