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

在Swift中:数组VS NSArray VS [AnyObject]之间的区别

夹谷英杰
2023-03-14
问题内容

如标题所示,Array vs NSArray vs [AnyObject]有什么区别?

另外,最推荐的解决方法。我的意思是建议最简单的实现是什么。谢谢。


问题答案:

Arraystruct ,因此它是Swift中的 值类型NSArray是一个不变的Objective C
,因此它是Swift中的 引用类型 ,并桥接到Array<AnyObject>
NSMutableArray是的可变子类NSArray

var arr : NSMutableArray = ["Pencil", "Eraser", "Notebook"]
var barr = ["Pencil", "Eraser", "Notebook"]

func foo (var a : Array<String>)
{
    a[2] = "Pen"
}

func bar (a : NSMutableArray)
{
    a[2] = "Pen"
}

foo(barr)
bar(arr)

println (arr)
println (barr)

印刷品:

(
    Pencil,
    Eraser,
    Pen
)
[Pencil, Eraser, Notebook]

因为foo更改的局部值abar更改参考。如果您这样做let arr而不是var像其他参考类型那样也可以使用。



 类似资料:
  • 问题内容: 考虑此函数,该函数采用通用参数,并根据谓词过滤数组。这与Swift提供的功能相同。 这有什么不同 即使在后面的示例中,我们也无法达到泛型的意义吗? 问题答案: 泛型是类型安全的,这意味着如果您将字符串作为泛型传递并尝试将其用作整数,则编译器会抱怨并且您将无法编译您的(很好)。(发生这种情况是因为Swift使用的是 Static类型 ,并且能够给您一个 编译器 错误 ) 如果使用AnyO

  • 问题内容: 我在Swift中有一组对象。每个对象都有餐厅的属性,例如名称,类型,位置等。如果我想将数组中所有包含类型的对象保留为“ Sushi”,该如何过滤数组。 具有2个对象的示例数组。过滤器应保留第一个对象(类型:sushi): 当前代码(但我不确定过滤器是否可以搜索的数组): 问题答案: 您的数组,是一个对象数组。因此,对于数组,您可以执行以下操作: 基于我们正在处理自定义对象的假设,我的原

  • 问题内容: 我无法理解AnyObject的局限性。 您可以从标题中看到Array是一个结构。但是,此代码有效: 而且不只是文字数组: 但是,我不能为我分配一个结构: 那么,数组毕竟不是真正的结构吗? 问题答案: 这是桥接出现时最有趣的部分… 默认情况下,Swift bridge (和朋友) 至 至 因此,如果需要,编译器会将它们更改为对象 你可以做 并且您不能将/ 分配给,因为它们不是对象类型(可

  • 问题内容: 我不明白何时在Swift中使用AnyObject以及何时使用Any。 就我而言,我有字典 [字串:???] ??? :可以是Int,Double,Float,String,Array,Dictionary 有人可以向我解释Any和AnyObject之间的区别以及在我的情况下使用哪个。 阿拉克 问题答案: 仅适用于引用类型(类),适用于值和引用类型。 所以你应该去。 类型转换为Any和A

  • 问题内容: 在 Swift 4.1中 似乎已弃用。但是在 Swift 4.1中 有一个新方法正在做同样的事情?有了它,您可以变换集合中的每个对象,然后删除所有为零的项目。 像flatMap一样 像compactMap 在做同样的事情。 这两种方法有什么区别?苹果为何决定重命名该方法? 问题答案: Swift标准库为函数定义了3个重载: 可以通过两种方式滥用最后一个重载函数: 考虑以下struct和

  • 本文向大家介绍swift中AnyObject和Any的介绍与区别详解,包括了swift中AnyObject和Any的介绍与区别详解的使用技巧和注意事项,需要的朋友参考一下 诞生 swift 作为新起步的语言,必然抛不掉一些历史遗留包袱。用过 Objective-C 的同学肯定知道有一种叫做 id 的类型。他可以表示任意类的实例,编译器不会对其类型声明的变量进行检查。在用 swift 做 app 开