据我了解,如有必要,Swift中的Array
会自动投放到NSArray
。
“当您从NSArray对象桥接到Swift数组时,生成的数组的类型为AnyObject []。如果对象是Any-Object兼容的,如果它是Objective-C或Swift类的实例,或者该对象可以桥接到一个对象。您可以将任何NSArray对象桥接到Swift数组,因为所有Objective-C对象都是AnyObject兼容的。因为所有NSArray对象都可以桥接到Swift数组,所以Swift编译器在导入Objective-C API时用AnyObject []替换NSArray类。“
Auszug aus:Apple Inc.“将Swift与Cocoa和Objective-C结合使用。”iBooks。 https://itunes.apple.com/de/book/using-swift-cocoa-objective/id888894773?mt=11
在我的Playground中,以下内容失败
[位置]不能转换为'NSArray'
import Foundation
enum Position : String {
case TopLeft = "Top Left", TopCenter = "Top Center", TopRight = "Top Right", BottomLeft = "Bottom Left", BottomCenter = "Bottom Center", BottomRight = "Bottom Right"
// pattern to iterate enums by http://www.swift-studies.com/blog/2014/6/10/enumerating-enums-in-swift
static let allValues : [Position] = [TopLeft, TopCenter, TopRight, BottomLeft, BottomCenter, BottomRight]
}
let a : NSArray = Position.allValues
正如我所理解的那样,Position.allValues是一个有效的数组,虽然是静态的。我想念一些东西还是有人可以帮忙?感谢。
答案 0 :(得分:4)
问题是allValues
是位置的数组。但是位置是一个枚举,而Swift枚举不能跨过Objective-C的桥梁。
所以,是的,[Int]
或[String]
将神奇地越过桥梁成为NSArray,而不是[Position]
- 正是错误信息告诉你的。
答案 1 :(得分:2)
作为@ matt的答案的补充,因为我注意到你在枚举中使用原始值,你可以将枚举的数组转换为字符串数组,只需获取每个案例的原始值,然后使用map
方法:
let a : NSArray = Position.allValues.map { $0.rawValue }