参数标签(_ :)与任何可用的重载都不匹配

时间:2018-03-19 14:32:56

标签: swift swift4

此处代码

    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 个答案:

答案 0 :(得分:0)

问题#1

您要用于NSNumber的初始值设定项写为:

init(value: Int)

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

init(_ value: Int)

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


问题#2

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

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

这将设置一个在a之间交替的破折号模式   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