Есть ли способ ограничить родительский тип тем или иным типом в Swift? - swift
0
Есть ли способ добавить несколько дополнительных ограничений в общий? Я бы хотел, чтобы мой дженерик был либо строкой, либо булом. Что-то вроде:
func myFunction<T>(_ dict: [String: T]) where T == String || T == Bool {
// Do stuff with dict
}
Источник
- 190
- 2
- 11 май 2020 2020-05-11 10:17:39
- RIP.Ben.Franklin
2 ответа
0
Вы можете просто создать протокол и настроить String и Bool на него:
protocol StringOrBool { }
extension Bool: StringOrBool {}
extension String: StringOrBool {}
func myFunction<T: StringOrBool>(_ dict: [String: T]) {
print(dict)
}
myFunction(["a": true])
myFunction(["b": "test"])
myFunction(["b": 1]) // error: MyPlayground Xcode 11.playground:706:1: error: global function myFunction requires that Int conform to StringOrBool
- 11 май 2020 2020-05-11 10:17:39
- Leo Dabus
0
Вы не можете ограничивать события одним типом:
// error: Same-type requirement makes generic parameter T non-generic
func myFunction<T>(_ dict: [String: T]) where T == String {
}
Возможно, вам нужна некоторая перегрузка вашей функции для ваших типов:
func myFunction(_ dict: [String: String]) {
print("String")
}
func myFunction(_ dict: [String: Bool]) {
print("Bool")
}
let strings = ["a": "b"]
let bools = ["a": false]
myFunction(strings) // print String
myFunction(bools) // print Bool
- 11 май 2020 2020-05-11 10:17:39
- rraphael