mes*_*ngr 3 swift swift2 xcode7-beta5
以下代码:
protocol SomeProtocol {}
class SomeClass: SomeProtocol {}
private func doSomethingWith(inout someVar: SomeProtocol) {}
private var someGlobalVar = SomeClass() // inferring SomeClass's type
doSomethingWith(&someGlobalVar)
Run Code Online (Sandbox Code Playgroud)
产生以下错误:
无法使用类型'(inout SomeClass)的参数列表调用'doSomethingWith'
更改倒数第二行以private var someGlobalVar: SomeProtocol = SomeClass()解决错误.
SUBJ.
除了@Sulthan所说的,还有两种可能的解决方案,具体取决于您的功能需要做什么.
您可以使函数通用:
func doSomethingWith<T : SomeProtocol>(inout someVar: T) {}
Run Code Online (Sandbox Code Playgroud)
现在您可以传递符合协议的任何类的实例:
var someGlobalVar = SomeClass()
doSomethingWith(&someGlobalVar)
Run Code Online (Sandbox Code Playgroud)
如果您只使用类的实例并且该函数仅修改实例指向的对象的属性,那么您根本不需要inout-parameter,因为类是引用类型.您只需将协议标记为"类协议":
protocol SomeProtocol : class {
var name : String { get set }
}
class SomeClass: SomeProtocol {
var name : String = ""
}
func doSomethingWith(someVar: SomeProtocol) {
// Modify the object:
someVar.name = "modfied"
}
var someGlobalVar = SomeClass()
doSomethingWith(someGlobalVar)
print(someGlobalVar.name) // "modified"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
403 次 |
| 最近记录: |