[swift-users] Optional chaining and String properties

Jacob Bandes-Storch jtbandes at gmail.com
Mon Aug 1 22:31:18 CDT 2016


er, I guess it's probably plain ol' map, rather than flatMap.

On Mon, Aug 1, 2016 at 8:28 PM, Jacob Bandes-Storch <jtbandes at gmail.com>
wrote:

> 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 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/f4554adf/attachment.html>


More information about the swift-users mailing list