Неизвестный параметр UInt8 в атрибуте _specialize: Xcode 9

Этот код, используемый для построения битового шаблона из массива битов, дает мне ошибку в Xcode 9 (работает в 8.3.3)

@_specialize(UInt8)
func integerFrom<T: UnsignedInteger>(_ bits: Array<Bit>) -> T {
    var bitPattern: T = 0
    for idx in bits.indices {
        if bits[idx] == Bit.one {
            let bit = T(UIntMax(1) << UIntMax(idx))
            bitPattern = bitPattern | bit
        }
    }
    return bitPattern
}

Ошибка

Неизвестный параметр UInt8 в атрибуте _specialize.

Любые выводы/предложения по этому поводу?


person Sahil Kapoor    schedule 14.06.2017    source источник
comment
@GoJava Ожидаемое поведение функции уже указано в комментарии над функцией (построение битового шаблона из массива битов). Спасибо за подсказку, но я сделаю это более явным.   -  person Sahil Kapoor    schedule 14.06.2017
comment
Извините, не увидел (комментарий удален). Спасибо за редактирование :)   -  person    schedule 14.06.2017
comment
в чем причина атрибута @_specialize в вашем коде? @_specialize в настоящее время действует как подсказка для оптимизатора ... вам это действительно нужно здесь? если вы уверены, что вам это нужно, используйте @_specialize(где T == UInt8) для swift 3.2   -  person user3441734    schedule 12.08.2017
comment
Я узнаю этот код. Вы можете удалить атрибут частной специализации или обновить синтаксис Swift 4 с помощью @_specialize(where T == UInt8)   -  person Marcin    schedule 20.09.2017


Ответы (1)


Вам просто нужно включить предложение where в определение specialize, подобное этому

@_specialize(where T == UInt8)
person Fran Martin    schedule 07.09.2017