当前位置: 首页 > 面试题库 >

如何在Swift中声明弱引用数组?

贺聪
2023-03-14
问题内容

我想在Swift中存储一系列弱引用。数组本身不应该是一个弱引用-它的元素应该是。我认为可可NSPointerArray对此提供了非类型安全的版本。


问题答案:

创建通用包装,如下所示:

class Weak<T: AnyObject> {
  weak var value : T?
  init (value: T) {
    self.value = value
  }
}

将此类的实例添加到您的数组。

class Stuff {}
var weakly : [Weak<Stuff>] = [Weak(value: Stuff()), Weak(value: Stuff())]

定义时Weak,可以使用structclass

另外,为了帮助获取数组内容,您可以按照以下方式进行操作:

extension Array where Element:Weak<AnyObject> {
  mutating func reap () {
    self = self.filter { nil != $0.value }
  }
}

AnyObject上面的用法应替换为T-但我不认为当前的Swift语言允许这样定义扩展。



 类似资料:
  • 问题内容: 如果我在Swift中需要自定义类型,可以,该怎么办?(类似于闭包语法typedef) 问题答案: 使用关键字代替

  • 我正在尝试将一个iOS应用程序从objective c改写成Swift。我使用序列化是为了通过某种通信层发送数据。在objective c中,我在每个结构的顶部使用#pragma pack(1),以便使用顺序布局,而不在数据成员之间填充。我尝试在结构的顶部使用PRAGMA_STRUCT_PACK。它似乎在操场上起作用,但在我的app中实现它时,我得到了一条错误信息,上面写着:“在顶层不允许使用表达

  • 问题内容: 我正在尝试使用以下代码声明和初始化属性。 但是,出现以下错误。 有人知道这是怎么回事吗?我应该放弃使用声明内联初始化属性的尝试,而是对init()方法进行初始化吗? 问题答案: 正如@giorashc所说,由于swift的两阶段初始化,self尚未被初始化,因此您不能这样做。 但是我认为您可以创建一个懒惰的初始化:

  • 问题内容: 除非a 声明为,否则引用似乎在Swift中不起作用,我不希望在纯Swift应用程序中使用它。 这段代码给出了一个编译错误(不能应用于非类类型): 我需要给协议加上前缀,然后它才能工作。 问题:什么是完成Swift的“纯” Swift方法 ? 问题答案: 您需要将协议类型声明为。 用你的话说,只有类才能符合此协议,而结构或枚举则不能。

  • 引用在Swift中似乎不起作用,除非声明为(我不希望在纯Swift应用程序中这样做)。 我需要为协议添加前缀,这样它就可以工作了。 问题:实现的“纯”快速方法是什么?

  • 问题内容: 我想知道如何在bash中声明2D数组,然后初始化为0。 在C中看起来像这样: 以及如何为元素分配值?如在C中: 问题答案: 您可以使用例如哈希来模拟它们,但需要注意前导零和许多其他事情。下一个演示有效,但远非最佳解决方案。 上面的示例创建了一个具有随机数的4x5矩阵,并将其打印后转置,示例结果 原理是:创建一个关联数组,其中索引是类似的字符串。好处: 可以用于任意维度的数组;)像:3维