Swift协议和带有类的弱引用

n狗

如果我有协议:

protocol SomeProtocol {
    func doSomething()
}

在助手类中,我引用了一个协议变量:

class someClass {
    var delegate: SomeProtocol? 
}

因为SomeProtocol未使用标记: class,所以delegate可以假定为任何值,并且在值类型(结构和枚举)的情况下,weak var由于值类型不能创建强引用因此不需要实际上,编译器只允许weak var类类型使用。

但是,没有什么可以阻止您将类设置为委托,并且如果未用该协议标记协议: class(因为SomeProtocol is),不能使用弱var`并且会创建一个保留周期)。

class MyClass: NSObject, SomeProtocol {
    func doSomething() { }
}

struct MyStruct: SomeProtocol {
    func doSomething() { }
}

let someClass = SomeClass()
let myStruct = MyStruct()
someClass.delegate = myStruct 
// After myStruct gets assigned to the delegate, do the delegate and the struct refer to the same instance or does the struct get copied?D

let myClass = MyClass()
someClass.delegate = myClass // can't use weak var so myClass is retained

给出上面的示例,在使用委托和数据源的情况下,是否应: class始终使用?基本上,用于维护引用的任何协议都应始终限于类对象,对吗?

瓦伦丁·谢尔金(Valentin Shergin)

正确的。如果您试图通过弱引用打破保留周期,则必须使用类,因为weak修饰符仅适用于引用类型(类)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有弱引用键的Swift字典?

来自分类Dev

在Swift属性中要求协议和类

来自分类Dev

符合协议和类的Swift属性

来自分类Dev

发送带有UDP协议和writeDatagram的结构

来自分类Dev

如何在Swift中从带有类型别名的协议中引用具有约束的泛型类?

来自分类Dev

没有存储Swift,协议和变量值...?

来自分类Dev

引用所有Swift协议?

来自分类Dev

带有uitableviewdatasource的Swift协议

来自分类Dev

带有uitableviewdatasource的Swift协议

来自分类Dev

如何获取Django中的URL(带有协议和域)(无请求)?

来自分类Dev

全局函数的Swift协议和返回类型

来自分类Dev

Swift协议和多态性

来自分类Dev

协议和通用类型中的Swift typealias

来自分类Dev

Swift协议和返回“ some View”的方法

来自分类Dev

带有基类的协议委托概念

来自分类Dev

引用带有变量的类

来自分类Dev

引用带有变量的类

来自分类Dev

Swift类不符合带有错误处理的Objective-C协议

来自分类Dev

Swift类不符合带有错误处理的Objective-C协议

来自分类Dev

使用协议和基类的游戏状态实现

来自分类Dev

如何解决协议和类字段类型之间的冲突?

来自分类Dev

弱引用和匿名类

来自分类Dev

如何在Swift中具有泛型的扩展中使用带有可选类方法的协议?

来自分类Dev

泛型类如何使带有约束的协议(带有init的协议)相符?

来自分类Dev

Swift 协议属性检查是否弱

来自分类Dev

Swift 协议属性检查是否弱

来自分类Dev

使用具有协议和关联类型的通用类型?

来自分类Dev

协议和 API 之间有什么区别?

来自分类Dev

带有协议的Lazy,私有属性的Swift Struct