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

时间:2016-02-21 23:33:55

标签: ios xcode swift

所以我已经完成了将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] = []

根据正确的数组类型,我想要返回的2种不同类型是CAShapeLayer和CAGradientLayer。我的方法检查和"排序"它就在这里:

 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
}

我遇到的问题是当它返回新数组时,它不会让我遍历不同的元素: My Error 我真的不知道为什么?我在C#中完全一样。我无法理解为什么这不应该起作用

(注意:我尝试使用[]而不是Array&lt;&gt;。  尝试仅成功返回1个特定类型,但没有使用第二个选项<)>

1 个答案:

答案 0 :(得分:0)

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

摘录自:Apple Inc.“The Swift Programming Language(Swift 2.1 Prerelease)。”iBooks。 https://itun.es/us/k5SW7.l

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

“aPath标识的文件中的数组表示必须只包含属性列表对象(NSString,NSData,NSDate,NSNumber,NSArray或NSDictionary对象)。有关更多详细信息,请参阅”属性列表编程指南“。即使数组是可变的,数组也是不可变的。“

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