Swift 3.Swift Generic «Числовой» Протокол, который Подтверждает числовые значения
В конце концов мои функции должны получить UInt8
типы данных, но я никогда не уверен, что если аргументы я буду получать от абонентов будут Int
, Int64
, UInt
, Float
и т. Д. Я знаю, что они будут цифровых типов, я просто не знаю, какой вкус.
я мог бы сделать:
func foo(value: Int) { }
func foo(value: Float) {}
func foo(value: UInt) {}
Но это безумие. Так я думал, что я мог бы сделать что-то вроде создать протокол
protocol ValidEncodable {
}
А затем передать типы, которые соответствуют:
func foo(value: ValidEncodable) { }
И тогда в этой функции я могу получить мои ценности в правильный формат
func foo(value: ValidEncoable) -> UInt8 {
let correctedValue = min(max(floor(value), 0), 100)
return UInt8(correctedValue)
}
Я действительно изо всех сил, чтобы выяснить
1) Как создать этот Вали dEncodable протокола, который содержит все числовые типов
2) И как сделать такие вещи, как пол (значение), когда значение, которое я получаю в Int без перебора всех возможных числовых типов (т.е. (пол (x) доступен только для типов с плавающей точкой)
В конечном счете мне нужны значения UInt8 в диапазоне 0-100. Вся причина этого безумия заключается в том, что я разбираю XML-файлы в своих собственных внутренних структурах данных, и я хочу испечь некоторые проверки для моих значений.
Отличная статья! Спасибо! – MH175
Это отлично работает! Еще раз спасибо. – MH175