Swift中如何函数式使用非运算符实现布尔值取反且无需自定义扩展
错误原因
Swift内置的!非运算符仅支持对Bool类型的直接值取反,而digitsExceptForFive.contains是一个(Int) -> Bool类型的函数,未传入参数时它本身不是布尔值,不符合!的操作数类型要求,因此触发类型转换报错。
最优原生解决方案(无需自定义扩展/运算符)
直接在filter的闭包中完成contains调用和取反操作,所有Swift版本均支持,符合函数式编程规范:
let digitsExceptForFive = [1, 2, 3, 4, 6, 7, 8, 9] let fives = [1, 2, 3, 4, 5, 6, 7, 8, 9].filter { !digitsExceptForFive.contains($0) } // 运行结果:[5]
写法中$0代表filter遍历到的当前Int元素,每次遍历都会将元素传入contains方法得到布尔结果,再通过!取反返回给filter做判断条件。
内容的提问来源于stack exchange,提问作者Ilias Karim
相关产品推荐
相关产品推荐

