Ale*_* G. 8 methods closures protocols swift xcode6-beta7
有人可以解释这个错误,为什么这适用于关闭?
如果你在'B'类中将'Test'更改为'A',那么在这两种情况下一切都有效.
beta 7
protocol Test {
func someFunc() -> String
var someClosure: () -> Int { get }
}
class A: Test {
func someFunc() -> String {
return "A String"
}
var someClosure: () -> Int {
return {
return 2
}
}
}
class B {
let a: Test
let aString: () -> String
let aInt: () -> Int
init(a: Test){
self.a = a
aString = a.someFunc // Error: Partial application of protocol method is not allowed
aInt = a.someClosure // Works fine
}
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
这里还有我奇怪的分段故障集合https://gist.github.com/aleksgapp/795a2d428008bdfa4823
如果你有任何想法,请不要犹豫.
更新(感谢Laszlo Korte)
来自Xcode 7 Beta 2和Swift 2.0发行说明:结构,枚举和协议的非变异方法现在可以部分应用于它们的"自身"参数.
例如:
let a: Set<Int> = [1, 2]
let b: [Set<Int>] = [[1], [3]]
b.map(a.union) // [[1, 2], [1, 2, 3]]
Run Code Online (Sandbox Code Playgroud)
原始答案(使用Swift 1.2更正Xcode 6)
协议可以通过类,结构或枚举来采用.在最后两种情况下,不允许部分应用结构或枚举方法,并且因为a: Test可以是结构或枚举而得到"不允许部分应用协议方法" .
换句话说,部分应用的方法或功能curried method or function.因此,当您编写时a.someFunc,尝试部分应用此方法,即获取对隐式持有引用的闭包的引用a.但是结构和枚举不是引用类型,它们是值类型,没有引用a.
小智 3
所以,我无法解释为什么它会这样,但我确实找到了解决方法。尝试这个:
aString = { return a.someFunc() }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2110 次 |
| 最近记录: |