【发布时间】:2020-07-14 17:06:50
【问题描述】:
我正在尝试为使用一些 Swift 方法的 NSArray 制作 Swift 扩展,但在从 NSArray 创建正确格式化的 Swift 数组的第一步时遇到了麻烦。
传入的 NSArray 看起来像
[@"Hello",@"Me",@"That",@"Me",@"Hello",@"Me",@"as",@"the"]
以下是不同版本的扩展:
这个版本创建了一个有效的数组,但是因为数组是一个 NSArray,而不是一个数组,所以在 line counts[item] 上失败并出现错误
不能使用索引为 '[String : Int]' 类型的值下标 输入“任何”
public extension NSArray {
public var sortedArray: NSArray {
let array : NSArray = self
for item in array {
counts[item] = (counts[item] ?? 0) + 1
}
print("counts",counts)
下一个有效,但没有将数组作为输入
public extension NSArray {
public var sortedArray: NSArray {
var array = ["Hello","Me","That","Me","Hello","Me","as","the"]
for item in array {
counts[item] = (counts[item] ?? 0) + 1
}
print("counts",counts)
以下两个方法编译,但array2和array3最终为空
public extension NSArray {
public var sortedArray: NSArray {
var array2: [String] = self.flatMap { $0 as? String } //This compiles but array is empty
var array3: [String] = self.compactMap({ $0 as? String }) //This compiles but
for item in array2 {
counts[item] = (counts[item] ?? 0) + 1
}
print("counts",counts)//prints 0 as the array is empty
注意:当我在扩展的开头插入断点时,self 是一个包含很多元素的有效 NSArray。
感谢您的任何建议。
【问题讨论】:
-
如果您提供扩展代码可能会有所帮助。
-
@nteissler 说了什么。另外,你为什么在 Swift 中搞乱 NSArrays。应该没有理由。
-
之所以使用 NSArray,是因为大部分项目都在 Obj-C 中。但是,我想要做的是,在 Swift 中创建一个按发生率排序的唯一值数组更容易。所以我想我会使用 Swift 扩展。
标签: swift nsarray flatmap swift-extensions