Encadenamiento opcional con cuerdas Swift

Con encadenamiento opcional, si tengo una variable Swift

var s: String?

s puede contener nil, o una cadena envuelta en un opcional. Entonces, intenté esto para obtener su longitud:

let count = s?.characters?.count ?? 0

Sin embargo, el compilador quiere esto:

let count = s?.characters.count ?? 0

Mi comprensión del encadenamiento opcional es que, una vez que comience a usar?. en una expresión punteada, el resto de las propiedades se hacen opcionales y normalmente se accede por?.no..

Entonces, cavé un poco más y probé esto en el patio de recreo:

var s: String? = "Foo"
print(s?.characters)
// Output: Optional(Swift.String.CharacterView(_core: Swift._StringCore(_baseAddress: 0x00000001145e893f, _countAndFlags: 3, _owner: nil)))

El resultado indica ques?.characters es de hecho una instancia opcional, que indica ques?.characters.count Debería ser ilegal.

¿Alguien puede ayudarme a entender este estado de cosas?

Respuestas a la pregunta(2)

Su respuesta a la pregunta