如何在swift中声明for循环?

时间:2014-07-08 11:45:26

标签: ios for-loop swift

我在Swift中编写for循环时遇到了一些问题。 任何人都可以猜到这个问题

 var sublayers : Array <AnyObject>= [self.previewLayer.sublayers]
        var subLayersCount: NSInteger = sublayers.count, currentSublayer = 0
        var featuresCount :NSInteger = features.count, currentFeature = 0;

        CATransaction.begin()
        CATransaction.setValue(kCFBooleanTrue, forKey: kCATransactionDisableActions)
        var layerTemp : CALayer = CALayer()
        for layerTemp  in sublayers{
            if(layerTemp.name  == "FaceLayer"){
                layerTemp.hidden = true
            }

我正在尝试检查子图层中的图层。 layertemp属于CAlayersublayers属于AnyObject

它给了我一个错误: Constant layerTemp is inferred to be of AnyObject which is unexpected.

任何人都可以对此有所了解。

obj-c中的等效代码是:

NSArray *sublayers = [NSArray arrayWithArray:[self.previewLayer sublayers]];
NSInteger sublayersCount = [sublayers count], currentSublayer = 0;
NSInteger featuresCount = [features count], currentFeature = 0;

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];

// hide all the face layers
for ( CALayer *layer in sublayers ) {
    if ( [[layer name] isEqualToString:@"FaceLayer"] )
        [layer setHidden:YES];
}   

1 个答案:

答案 0 :(得分:5)

尝试替换

var layerTemp : CALayer = CALayer()
for layerTemp  in sublayers{

//for layerTemp in sublayers as CALayer[] { // No longer works after Beta 3...
for layerTemp in sublayers as [CALayer] { // New sugar

诀窍是你必须转换数组,而不是元素,它的类型总是被推断出来。这将工作:

for layerTemp as CALayer in sublayers { // doesn't compile

虽然由于类型安全而无效:

for layerTemp:CALayer in sublayers { // fails if sublayers is not [CALayer]