假设我有一个AnyObject
的数组。按类型过滤Swift [AnyObject]数组
let grabBag: [AnyObject] = [ "Tom", 4, "Dick", NSObject(), "Harry" ]
,我想它转换的Strings
阵列,只抽出,它们事实上Strings
这些元素。我期望这个工作:
let strings = grabBag.filter{ $0 is String } as! [String] // 1
但它给出了错误'Bool' is not convertible to 'String'
。然而,这个工程:
let definitelyStrings = grabBag.filter{ $0 is String } // 2
let strings = definitelyStrings as! [String] //
为什么2
工作时1
不?是否有比更简单(比2
)提取和投射[AnyObject]
的元素的方法?
在示例2中,您不需要第二行:'let strings = grabBag.filter {$ 0 is String}'就足够了。没有强制类型转换。用''字符串'[String]'证明它返回真正的 – vadian
@vadian'let strings = grabBag.filter {$ 0 is String}'返回具有OP的'grabBag'数组而不是'[String]'的'[AnyObject]'。 – Moritz
@EricD:但是你可以通过'[AnyObject]'' – vadian