gpt4 book ai didi

cocoa - 在 Swift 中创建唯一成员集合

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

我看不出有任何方法可以保证像 Cocoa NSSets 这样的 Swift 数组/集合成员的唯一性。如果这是真的,那么我想知道 Swift 与 Cocoa 相比还缺少什么?

我错过了什么,如果有的话?

最佳答案

您缺少的是 NSSet 和 Foundation、Cocoa 等的其余部分仍然存在,并且永远存在。

编辑:在 Swift 1.2 中,Set 是原生的 Swift 类型,您将改用它。

在需要时使用 NSSet 绝对没有错。这是我自己的代码中的示例:

class TracksViewController : UITableViewController {
// ...
var observers = NSMutableSet()
// ...
override func viewDidLayoutSubviews() {
func noteNowPlayingItem (note:NSNotification?) {
// ...
}
// do it now!
noteNowPlayingItem(nil)
// and do it later, when now playing item notification arrives
let ob = NSNotificationCenter.defaultCenter().addObserverForName(MPMusicPlayerControllerNowPlayingItemDidChangeNotification,
object: nil, queue: NSOperationQueue.mainQueue(),
usingBlock: noteNowPlayingItem)
self.observers.addObject(ob)
}
// ...
}

所以我使用 NSMutableSet 作为存储通知观察者的方式,这样我可以稍后进行内存管理。没问题。

但是请注意,在我看来,就在那一小段代码中,我利用了 Swift 的特性,这些特性使其在 Objective-C 之上遥遥领先:

  • NSMutableSet 属性不必在代码中初始化(例如在初始化程序中,或在 viewDidLoad 中);当我声明它时,我做对了。你不能在 Objective-C 中这样做。所以这是安全的;这个属性永远不会意外地变成 nil(你遇到过这种情况吗??)。

  • 我使用函数中函数,这样我既可以调用闭包又可以传递闭包。是的,您可以在 Objective-C 中做同样的事情(给 block 命名),但是这种语法更简单还是什么?每次使用它时,我都必须查找“命名闭包”语法;现在我花时间编写代码,而不是查找我不会写或读的晦涩语法。

事实上,只是暂时坚持使用数组,很多时候你有一个 Swift 数组,但你需要将它转换为 NSArray,或者将一个数组传递给一个采用 NSArray 的 Cocoa 方法,以便调用一些没有 Swift 等价物的 Foundation 方法。这不是问题。

关于cocoa - 在 Swift 中创建唯一成员集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24579759/

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