Я изучаю Swift и использую операторы Swift (https://developer.apple.com/documentation/swift/operator-declarations ) и увидел оператор «Поточечное логическое НЕ» (.!). Я начал гуглить и наткнулся на вопрос по stackoverflow( Какова функциональность Pointwise Equal, Pointwise меньше и Pointwise больше в Swift?), мне рассказали про протокол SIMD и дали ссылку на документацию, но я не нашел оператора среди операторов данного протокола.! . Не могли бы вы помочь мне с примером с этим оператором. заранее спасибо
main.swift:131:9: ошибка: тип Bool не соответствует протоколу SIMDScalar пусть z = SIMD3 (истина, ложь, правда)
main.swift:132:10: ошибка: не удалось определить общий параметр «Хранилище» вар yy = .!z
main.swift:131:9: ошибка: тип Bool не соответствует протоколу SIMDScalar пусть z = SIMD3 (истина, ложь, правда)
main.swift:132:10: ошибка: не удалось определить общий параметр «Хранилище» вар yy = .!z
Я думаю, ваша проблема связана с попыткой заполнить значения SIMD
логическими значениями. SIMD
типы хранят только целые, плавающие и двойные значения. Для хранения логических значений существует специальный тип SIMDMask, который, например, является результатом таких операторов, как .==
, .<
и т. д.
.! отрицает каждый логический член маски SIMD, например.
import simd
let a: SIMD2<Int> = [10, 20]
let b: SIMD2<Int> = [ 0, 30]
let exampleMask: SIMDMask<SIMD2<Int>> = a .< b
let invertedMask = .!exampleMask
print( exampleMask) // => [false, true]
print(invertedMask) // => [ true, false]
Результат a .< b
такой же, как .!(a .>= b)
, точно так же, как для одиночных скалярных значений !(a < b)
совпадает с !(a >= b)
.
Спасибо большое, вы помогли мне в этом нелегком деле.
Это работает, но, как указано в ошибке, Bool не соответствует протоколу. Допустимые типы см. на странице developer.apple.com/documentation/swift/simdscalar в разделе «Отношения».