下面的代码:
protocol SomeProtocol {}
class SomeClass: SomeProtocol {}
private func doSomethingWith(inout someVar: SomeProtocol) {}
private var someGlobalVar = SomeClass() // inferring SomeClass's type
doSomethingWith(&someGlobalVar)
产生以下错误:
无法使用“(inout SomeClass)”类型的参数列表调用“doSomethingWith”
将倒数第二行更改为private var someGlobalVar: SomeProtocol = SomeClass()
解决了错误。
Subj.
除了@Sulthan所说的之外,还有两种可能的解决方案,
取决于你的功能需要做什么。
你可以使该功能generic:
func doSomethingWith<T : SomeProtocol>(inout someVar: T) {}
现在您可以传递符合协议的任何类的实例:
var someGlobalVar = SomeClass()
doSomethingWith(&someGlobalVar)
如果您只使用 a 的实例class并且仅功能
修改实例指向的对象的属性,那么您根本不需要 inout 参数,因为类是引用类型。
您只需将该协议标记为“类协议”:
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"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)