gpt4 book ai didi

arrays - 这个 [AnyObject] 如何作为 AnyObject 返回?

转载 作者:可可西里 更新时间:2023-11-01 00:00:56 24 4
gpt4 key购买 nike

import Cocoa

class Brain{
var internalProgram = [AnyObject]()
var program:AnyObject{
get{
return (internalProgram as AnyObject)
}
}
}

var savedProgram: AnyObject?
let brain = Brain()
func save(){
savedProgram = brain.program
}

这个 internalProgram:[AnyObject] 如何返回 AnyObject 而 Xcode 不给出警告或错误?我知道 program 的类型已经设置为 AnyObject 但我的意思是这怎么能工作而不应该是 [AnyObject]?那么为什么没有任何警告或错误问题呢?

最佳答案

So why no any warning or error issue?

如果你不说 as AnyObject 就会有:

class Brain {
var internalProgram = [AnyObject]()
var program: AnyObject {
get {
// compiler error:
// Return expression of type '[AnyObject]' does not conform to 'AnyObject'
return internalProgram
}
}
}

编译器告诉我们 [AnyObject]不符合 AnyObject ——这是千真万确的。 swift Arraystruct , 不是 class , 因此不能直接输入为 AnyObject .

但是,您然后说 as AnyObject .通过这样做,您桥接 Swift ArrayNSArray (当 Foundation 被导入时)——一个class .因此它可以输入为 AnyObject .您可以看到可以桥接到 here 的基础类型的完整列表.

此外值得注意的是,在 Swift 3 中,everything can be bridged to AnyObject 由于不透明的引入 _SwiftValue类型,它可以将任意 Swift 值包装在 Obj-C 兼容框中(包括 Array 未导入 Foundation 时)。

因为任何现在都可以是AnyObject , 它和 Any 一样弱.除此之外,它还允许您调用任何已知的@objc方法,完全无视类型安全,几乎可以保证给你带来问题 _SwiftValue拳击。由于这些原因,您应该避免使用 AnyObject尽你所能。那里is nearly always a stronger type可供您使用。

关于arrays - 这个 [AnyObject] 如何作为 AnyObject 返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42953770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com