有没有办法将 'is' 类型检查运算符与 RandomAccessCollection 一起使用?
Is there a way to use the 'is' type check operator with RandomAccessCollection?
我在 'if' 条件下收到以下错误:
"协议'RandomAccessCollection'只能用作泛型约束,因为它有Self或关联类型要求"
let str = "mystring"
let v = str.utf8
if v is RandomAccessCollection {
print("YES")
} else {
print("NO")
}
出于好奇,有没有办法使用“is”类型检查运算符来检查 object/instance 是否符合 RandomAccessCollection?
这些 运行时 的类型检查 不灵活。不要那样做。
一种可能的方法是方法重载,例如在编译时执行检查
func checkType<T>(obj: T) {
print("NO")
}
func checkType<T:RandomAccessCollection>(obj: T) {
print("YES")
}
let str = "mystring"
let v = str.utf8
checkType(obj: v) // prints NO
let x = Data(v)
checkType(obj: x) // prints YES
如果对象符合协议,则调用第二个方法,否则调用第一个方法。
我在 'if' 条件下收到以下错误:
"协议'RandomAccessCollection'只能用作泛型约束,因为它有Self或关联类型要求"
let str = "mystring"
let v = str.utf8
if v is RandomAccessCollection {
print("YES")
} else {
print("NO")
}
出于好奇,有没有办法使用“is”类型检查运算符来检查 object/instance 是否符合 RandomAccessCollection?
这些 运行时 的类型检查 不灵活。不要那样做。
一种可能的方法是方法重载,例如在编译时执行检查
func checkType<T>(obj: T) {
print("NO")
}
func checkType<T:RandomAccessCollection>(obj: T) {
print("YES")
}
let str = "mystring"
let v = str.utf8
checkType(obj: v) // prints NO
let x = Data(v)
checkType(obj: x) // prints YES
如果对象符合协议,则调用第二个方法,否则调用第一个方法。