这里的代码
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/