繁体   English   中英

类型'NSArray?.Type'不符合协议'序列'

[英]Type 'NSArray?.Type' does not conform to protocol 'Sequence'

从Objective-C转换后,我在Swift中遇到问题。 谁能帮我解决此问题?

var panels = NSArray?

func buttonTotalWidth() -> CGFloat {
        var width: CGFloat = 0
        for panel: UIView? in panels {
            width += panel?.frame.width
        }
        return width
    }

我的Objective C代码

@property NSArray *panels;

- (CGFloat)buttonTotalWidth {
    CGFloat width = 0;
    for (UIView *panel in self.panels) {
        width += CGRectGetWidth(panel.frame);
    }
    return width;
}

错误画面

请不要尝试将ObjC代码从字面上转换为Swift。 了解Swift的特定内容。

快速翻译可能是

var panels = [UIView]()

func buttonTotalWidth() -> CGFloat {
    return panels.map{$0.frame.width}.reduce(0.0, + )
}

此方法接受UIView的数组(而不是可选的UIVIew),请尝试此

var panels = self.view.subviews
var width = buttonTotalWidth(panels)

func buttonTotalWidth(_ panels: [UIView]) -> CGFloat {
    var width: CGFloat = 0
    for panel: UIView in panels.enumerated() {
        width += panel.frame.width
    }
    return width
}

如果这些是一些可选的UIView,请尝试此操作,

func buttonTotalWidth(_ panels: [UIView?]) -> CGFloat {
    var width: CGFloat = 0
    for panel: UIView? in panels.enumerated() {
        width += panel?.frame.width
    }
    return width
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM