[swift-users] Optional chaining and String properties
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
is legal, but
is not. This seems counterintuitive. Can someone explain the logic or rules
being used here?
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
> 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"
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the swift-users