所以我已经完成了将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个特定类型,但没有使用第二个选项<)>
答案 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中循环遍历它。