Swift中Pointwise Logical Not(.!)运算符用法及报错咨询
关于Swift中Pointwise Logical Not(.!)运算符的正确使用
报错原因解析
Bool并未遵循SIMDScalar协议,因此无法直接通过SIMD3(true, false, true)创建SIMD实例——SIMD的标量类型要求为数值型(如Int、Float、UInt等),布尔值需通过SIMDMask类型或整数0/1模拟。.!是针对遵循SIMD协议类型(尤其是SIMDMask)的逐位逻辑非运算符,你的代码因z的类型不符合要求导致类型推断失败。
正确使用示例
方式1:使用SIMDMask类型(推荐用于布尔掩码场景)
// 创建对应SIMD3的布尔掩码实例 let z = SIMDMask<SIMD3<Int32>>(true, false, true) // 执行逐位逻辑非运算 let yy = .!z print(yy) // 输出:SIMDMask<SIMD3<Int32>>(false, true, false)
方式2:用数值SIMD类型模拟布尔运算
如果需要用整数表示布尔状态(1=true,0=false),可以直接使用数值型SIMD:
// 用Int32的SIMD实例模拟布尔值 let z = SIMD3<Int32>(1, 0, 1) // 逐位逻辑非,将1转为0,0转为1 let yy = .!z print(yy) // 输出:SIMD3<Int32>(0, 1, 0)
补充说明
.!运算符的作用是对SIMD实例的每个元素单独执行逻辑非操作,属于逐位(Pointwise)运算。- 若需要在SIMDMask和原生Bool之间转换,可使用
SIMDMask的初始化方法或单个元素的boolValue属性。
内容的提问来源于stack exchange,提问作者koshe1ca
相关产品推荐
相关产品推荐

