Swift类型一致性声明中波浪号(~)的含义是什么?
Swift类型一致性声明中波浪号(~)的含义是什么?
嗨,这个问题问得特别好!你看到的~Copyable其实是Swift 5.9及以后版本引入的否定型协议约束,专门用来表示类型不遵循某个协议。
咱们结合你给出的代码片段具体说:
- 对于
enum Optional<Wrapped> where Wrapped : ~Copyable,这句的意思是Optional的泛型参数Wrapped必须是不遵循Copyable协议的类型 - 而
protocol ExpressibleByNilLiteral : ~Copyable,则表示所有遵循ExpressibleByNilLiteral协议的类型,本身必须不遵循Copyable协议
这个语法是Swift为了更好地支持非可拷贝类型(就是那些只能移动、不能被复制的类型)而新增的特性——在此之前,Swift的泛型约束只能表达“必须遵循某协议”,没法直接声明“必须不遵循某协议”的反向约束,这个语法刚好填补了这个空白。
你说在Swift官方书籍和语法摘要里找不到相关说明,这其实很正常,因为这个特性相对较新,官方的核心文档可能还没来得及同步更新到这些板块里。
另外你提到的~的其他用法,比如对数字的按位取反、~=模式匹配运算符,和这个类型约束里的~是完全独立的语法,只是恰好复用了同一个符号而已。
备注:内容来源于stack exchange,提问作者HangarRash
相关产品推荐
相关产品推荐

