returns(一个,但可以是不同类型)数组的方法?

Method that returns (one, but can be different type) Array?

所以我完成了将 Microsoft 应用程序转换为 IOS 的任务,并且我偶然发现了一个在 C# 中有效但在 swift 中无效的小问题 2.

我想做的就是标题所说的和代码。

private let secondsCircle = CAShapeLayer()
private let minutesCircle = CAShapeLayer()
private let hoursCircle = CAShapeLayer()
private var shapeLayers: [CAShapeLayer] = []


private let secondsGradientMask = CAGradientLayer()
private let minutesGradientMask = CAGradientLayer()
private let hoursGradientMask = CAGradientLayer()
private var gradientLayers: [CAGradientLayer] = []

根据正确的数组类型,我想要 return 的 2 种不同类型是 CAShapeLayer 和 CAGradientLayer。我的检查方法 "sorts" 在这里:

 private func iterateThroughCollection(collection: Array<AnyObject>) -> Array<AnyObject> {
    let newCollection: Array<AnyObject> = collection

    if var getLayer = newCollection as? Array<CAShapeLayer> where getLayer.count == 0 {
        getLayer.append(self.secondsCircle)
        getLayer.append(self.minutesCircle)
        getLayer.append(self.hoursCircle)
        return getLayer
    } else if var getGradients = newCollection as? Array<CAGradientLayer> where getGradients.count == 0 {
        getGradients.append(self.secondsGradientMask)
        getGradients.append(self.minutesGradientMask)
        getGradients.append(self.hoursGradientMask)
        return getGradients 
    }
    return newCollection
}

我遇到的问题是,当它 return 是新数组时,它不允许我遍历不同的元素: My Error 我真的不知道为什么?我在 C# 中有完全相同的东西。我不明白为什么这不起作用

(注意:我尝试使用 [] 而不是 Array<>。 尝试 return 仅 1 种特定类型成功,但未使用第二个选项)

“数组 数组将相同类型的值存储在有序列表中。相同的值可以在数组的不同位置多次出现。”

摘自:Apple Inc.“Swift 编程语言(Swift 2.1 预发行版)。”电子书。 https://itun.es/us/k5SW7.l

在Swift中,数组的元素必须是同一类型。但是,如果您使用 Apple API 的 NSArray 或 NSMutableArray,那么您可以在同一个集合中存储不同的类型。 回复:NSArray 文档:

"The array representation in the file identified by aPath must contain only property list objects (NSString, NSData, NSDate, NSNumber, NSArray, or NSDictionary objects). For more details, see Property List Programming Guide. The objects contained by this array are immutable, even if the array is mutable."

正确加载数组后,您可以在 Swift 中使用循环或 map 等函数循环遍历它。