gpt4 book ai didi

objective-c - 使用 "member"获取 Set 中的元素

转载 作者:搜寻专家 更新时间:2023-10-31 08:25:52 25 4
gpt4 key购买 nike

我是 Swift 的新手,我正在尝试将一段 Objective-C 代码重写成 Swift 语言。原始代码是修改 Set 中的一个元素:

@property (nonatomic, strong, nonnull) NSMutableSet<CustomItem *> *itemsSet;
...

CustomItem *item = [[CustomItem alloc] initWithSomething:something];
CustomItem *existingItem = [self.itemsSet member:item];
if (existingItem) {
existingItem.property = 3
}

Swift 代码看起来像这样:

var itemsSet = Set<CustomItem>()
...

let item = CustomItem(something: something)
let existingItem = self.itemsSet...?

是否可以使用 Swift 以类似的方式获取 Set 的元素?

最佳答案

很遗憾,我不知道为什么这没有按预期工作。我本以为 Swift Set 也有一个 member 函数——显然它没有

Swift 模块的文档中写了以下内容:

/// A shadow for the "core operations" of NSSet.
///
/// Covers a set of operations everyone needs to implement in order to
/// be a useful `NSSet` subclass.
@objc public protocol _NSSetCoreType : _NSCopyingType, _NSFastEnumerationType {
public init(objects: UnsafePointer<AnyObject?>, count: Int)
public var count: Int { get }
public func member(object: AnyObject) -> AnyObject?
public func objectEnumerator() -> _NSEnumeratorType
public func copyWithZone(zone: _SwiftNSZone) -> AnyObject
public func countByEnumeratingWithState(state: UnsafeMutablePointer<_SwiftNSFastEnumerationState>, objects: UnsafeMutablePointer<AnyObject>, count: Int) -> Int
}

听起来所有这些函数在 Swift 中都不可用(我对这个函数的看法可能是错误的,但它似乎是真的)。​​

一个解决方法是使用 NSMutableSet(与 Objective-C 中的类型相同):

var itemsSet : NSMutableSet = NSMutableSet()
itemsSet.addObject("bla")
let existingItem = itemsSet.member("bla")

另一种是编写稍微多一些的代码,但保持在“Swift 领域”:

let item = CustomItem(something: "")
if let index = itemsSet.indexOf(item) {
let existingItem = itemsSet[index]
existingItem.something = "somethingElse"
}

关于objective-c - 使用 "member"获取 Set 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35069950/

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