如何在swift中声明for循环?

-4 for-loop ios 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
            }
Run Code Online (Sandbox Code Playgroud)

我试图检查子层中的图层. layertempCAlayersublayers是的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];
}   
Run Code Online (Sandbox Code Playgroud)

Gri*_*mxn 5

尝试更换

var layerTemp : CALayer = CALayer()
for layerTemp  in sublayers{
Run Code Online (Sandbox Code Playgroud)

//for layerTemp in sublayers as CALayer[] { // No longer works after Beta 3...
for layerTemp in sublayers as [CALayer] { // New sugar
Run Code Online (Sandbox Code Playgroud)

诀窍是你必须转换数组,而不是元素,其类型将始终被推断.这将工作:

for layerTemp as CALayer in sublayers { // doesn't compile
Run Code Online (Sandbox Code Playgroud)

虽然因类型安全而无法使用:

for layerTemp:CALayer in sublayers { // fails if sublayers is not [CALayer]
Run Code Online (Sandbox Code Playgroud)