此处代码
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]
知道需要更改哪些内容才能解决此问题
答案 0 :(得分:0)
您要用于NSNumber
的初始值设定项写为:
init(value: Int)
为了省略参数标签value:
,它将被写为:
init(_ value: Int)
由于没有下划线,您不能省略参数标签。
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))
<强> 参考 强>