Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 冒号(:)和eqaul to运算符(=)之间的差异-Generic Where子句:我希望数组有条件地符合协议_Swift_Generics_Swift Protocols_Swift5 - Fatal编程技术网

Swift 冒号(:)和eqaul to运算符(=)之间的差异-Generic Where子句:我希望数组有条件地符合协议

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应该符

我需要一个简短而清晰的解释为什么会发生这种情况

我使用了swift文档中介绍的“有条件地遵守协议”()

我希望
数组
类型符合我的
测试
协议,只要数组中的元素符合该协议

协议测试{
变量结果:字符串{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