这里的代码

    func decorate(_ element:UIView, borderSize:Int, borderColor:UIColor, dashed:Bool)
{
    let segmentSize = borderSize * 2
    let border = CAShapeLayer()
    border.strokeColor = borderColor.cgColor
    border.fillColor = nil
    border.lineWidth = CGFloat(borderSize)

    if (dashed) {
        border.lineDashPattern = [NSNumber(segmentSize), segmentSize]
    }

    border.path = UIBezierPath(rect:element.bounds).cgPath
    border.frame = element.bounds

    element.layer.addSublayer(border)
}


错误显示在这条线

border.lineDashPattern = [NSNumber(segmentSize), segmentSize]


任何想法需要更改以解决此问题

最佳答案

问题1

您要用于NSNumber的初始化程序写为:

init(value: Int)


为了省略参数标签value:,它应写为:

init(_ value: Int)


由于没有下划线,因此您不能忽略参数标签。



问题二

CAShapeLayer属性lineDashPattern需要一个[NSNumber]?,它是NSNumber的可选数组。另请注意,Array要求所有元素都是同一类型,因为它是通用集合。

let example: [NSNumber]? = [NSNumber(value: 2), NSNumber(value: 2)]



  这将设置一个虚线图案,该图案在
  2个用户空间单位长的绘制段和2个用户空间单位长的段
  未上漆的线段。




解决方案

border.lineDashPattern = [NSNumber(value: segmentSize), NSNumber(value: segmentSize)]


要么

border.lineDashPattern = [segmentSize as NSNumber, segmentSize as NSNumber]


要么

let paintedSegmentLength = NSNumber(value: segmentSize)
let unpaintedSegmentLength = NSNumber(value: segmentSize)
border.lineDashPattern = [paintedSegmentLength, unpaintedSegmentLength]


要么

border.lineDashPattern = Array(repeatElement(NSNumber(value: segmentSize), count: 2))




参考文献

NSNumber Foundation Reference

Functions in Swift

lineDashPatter - CAShapeLayer

Working with Cocoa Frameworks - Foundation - Numbers

关于swift - 参数标签(_ :)与任何可用的重载都不匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49365445/

10-09 17:31