首页 文章

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

提问于
浏览
0

Here the code

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)
}

erroe show in this line

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

Any idea what need to change to resolve this

1 回答

  • 0

    问题#1

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

    init(value: Int)
    

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

    init(_ value: Int)
    

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

    问题#2

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

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

    这将设置一个破折号模式,该模式在2用户空间单位长绘制的段和2用户空间单元长未涂漆段之间交替 .

    解决方案

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

    or

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

    or

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

    or

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

    References

    NSNumber Foundation Reference

    Functions in Swift

    lineDashPatter - CAShapeLayer

    Working with Cocoa Frameworks - Foundation - Numbers

相关问题