#ios #swift #swift3
#iOS #swift #swift3
Вопрос:
Я конвертирую некоторый код Swift 2 в Swift 3. Вот код в Swift 2
if self.maskImagePixelData != nil {
if let context:CGContext = CGBitmapContextCreate(
amp;maskImagePixelData!,
Int(inputImage.size.width),
Int(inputImage.size.height),
8,
Int(inputImage.size.width),
CGColorSpaceCreateDeviceGray(),
CGImageAlphaInfo.None.rawValue ) {
CGContextSetLineCap(context, CGLineCap.Round)
CGContextSetLineJoin(context, CGLineJoin.Round)
CGContextSetLineWidth(context, CGFloat(touchRadius * 2))
if remove {
CGContextSetBlendMode(context, CGBlendMode.PlusDarker)
} else {
CGContextSetGrayStrokeColor(context, 1.0, 1.0)
CGContextSetBlendMode(context, CGBlendMode.PlusLighter)
}
let path = CGPathCreateMutable()
for line:(start:CGPoint, end:CGPoint) in lines {
CGPathMoveToPoint(path, nil, line.start.x, inputImage.size.height - line.start.y)
CGPathAddLineToPoint(path, nil, line.end.x, inputImage.size.height - line.end.y)
}
CGContextAddPath(context, path)
CGContextStrokePath(context)
}
}
И вот как я преобразовал его в Swift 3
if self.maskImagePixelData != nil {
if let context:CGContext = CGContext(
data: amp;maskImagePixelData!,
width: Int(inputImage.size.width),
height: Int(inputImage.size.height),
bitsPerComponent: 8,
bytesPerRow: Int(inputImage.size.width),
space: CGColorSpaceCreateDeviceGray(),
bitmapInfo: CGImageAlphaInfo.none.rawValue ) {
context.setLineCap(CGLineCap.round)
context.setLineJoin(CGLineJoin.round)
context.setLineWidth(CGFloat(touchRadius * 2))
if remove {
context.setBlendMode(CGBlendMode.plusDarker)
} else {
context.setStrokeColor(gray: 1.0, alpha: 1.0)
context.setBlendMode(CGBlendMode.plusLighter)
}
let path = CGMutablePath()
for line:(start:CGPoint, end:CGPoint) in lines {
path.move(to: CGPoint(x: line.start.x, y: inputImage.size.height - line.start.y))
path.move(to: CGPoint(x: line.end.x, y: inputImage.size.height - line.end.y))
}
context.addPath(path)
context.strokePath()
}
}
В версии Swift 2 [UInt8]
self.maskImagePixelData
значение изменено, т.Е. Код манипулирует значениями в массиве байтов, в то время как в коде Swift 3 они остаются неизменными.
Это похоже на правильный перевод с Swift 2 на Swift 3; чего мне не хватает? Почему массив байтов не перезаписывается кодом Swift 3?
Комментарии:
1. Вероятно, вы хотели вызвать
path.addLine
вместо второгоpath.move
фрагмента Swift 3.2. Дох! Превосходно, спасибо. Я не скажу вам, как долго я смотрел на эти строки, пытаясь понять, что было не так! В мою защиту могу сказать, что в реальном коде есть несколько строк комментариев, которые, возможно, отвлекали меня.