Swift 冒号(:)和eqaul to运算符(=)之间的差异-Generic Where子句:我希望数组有条件地符合协议
我需要一个简短而清晰的解释为什么会发生这种情况 我使用了swift文档中介绍的“有条件地遵守协议”() 我希望Swift 冒号(:)和eqaul to运算符(=)之间的差异-Generic Where子句:我希望数组有条件地符合协议,swift,generics,swift-protocols,swift5,Swift,Generics,Swift Protocols,Swift5,我需要一个简短而清晰的解释为什么会发生这种情况 我使用了swift文档中介绍的“有条件地遵守协议”() 我希望数组类型符合我的测试协议,只要数组中的元素符合该协议 协议测试{ 变量结果:字符串{get} } 扩展名Int:Test{ 变量结果:字符串{ 返回“int” } } 扩展数组:Test,其中元素:Test{ 变量结果:字符串{ 返回“数组” } } 然后,我声明了这样一个数组实例 let array1=Array() 打印(数组1为测试)//**错误** 我原以为array1应该符
数组
类型符合我的测试
协议,只要数组中的元素符合该协议
协议测试{
变量结果:字符串{get}
}
扩展名Int:Test{
变量结果:字符串{
返回“int”
}
}
扩展数组:Test,其中元素:Test{
变量结果:字符串{
返回“数组”
}
}
然后,我声明了这样一个数组实例
let array1=Array()
打印(数组1为测试)//**错误**
我原以为array1应该符合测试
协议(真
),但没有找到
然后,我尝试了下面的扩展方法,它成功了
extension Array: Test where Element == Test {
var result: String {
return "array"
}
}
let array2 = Array<Test>()
print(array2 is Test) // **true**
扩展数组:测试其中元素==Test{
变量结果:字符串{
返回“数组”
}
}
设array2=Array()
打印(array2为测试)//**正确**
我认为Array()
意味着“可以接受符合Test
protocol的元素的数组”,因此这个数组应该符合相同的协议,就像我在第一个扩展中声明的那样。
问题
1.冒号(
:
)和等于运算符(==
)之间的差异-
:
仅表示一致类型/=
表示相同类型?2.解释当我像
array()
这样声明数组实例时它是如何工作的这本质上与中的问题相同–在array()
中元素
类型等于Test
,但不符合Test
。