`if let name = optionalName ` 这里 optionalName 是 String? ,但 name 就是 String 了。 如果 optionalName 有值,该值会被赋值给 name ,并进入 if 体 (if let 为真) 如果 optionalName 没有值,那么不会执行 if 体,或者进入 else (if let 为假) * * * 要说语法规范,就得去看 swift 的 [reference](https://link.segmentfault.com/?enc=9KEmgsfpDylxQPaMbHMTjA%3D%3D.It42n2%2BKVHAb5py27Rb25p9tJd%2BEuFeua9M8Krq0Tka%2FE26G4DCqoK%2FTC7i6tEMbM09hP8P%2FuWRiyXbd1AEKOF75JEojy3h8YaPP46pXlPT9i71qXyg6XiA1ma3fz4dgHFF2YPNznXhd5BDfqd87Ag%3D%3D) 了: > condition → expression | availability-condition | case-condition | optional-binding-condition > case-condition → case pattern initializer > **optional-binding-condition → let pattern initializer? | var pattern initializer?** 你看 condition 里是专门又一个 optional-binding-condition 的,用的就是 let 语法。 规范在 [Optional Binding](https://link.segmentfault.com/?enc=9pw9vXL7jf%2BU8u1NUs9vMQ%3D%3D.1Pw%2FJJ3zhLd6qd9f9CLQPBO6c9cBeJhTwF7fo4aTqZXbSvsZdgtN8cSHce8%2BrpfAoJRSDCH1BjV36hTySCv1Q47FNfYlLQ0tzy2KVntm432RUjrB7K3cw5NbliZBsQVAiXW0ta2l7ve2xbi3WnOksg%3D%3D) 里介绍了它的语义。 * * * swift 这个 reference 现在写的质量还不够高。 现在 swift 应该还是在照着编译器写规范,而不是按照规范写编译器。也就是说,编译器具体实现就是规范。