Swift - не удалось найти перегрузку... и не удается преобразовать тип выражения
Я адаптировался к Swift-методу ObjectiveC, который я нашел в интернете (может быть, здесь, я не помню его), и когда я собираю его для iPad Air, он работает отлично, но когда я пытаюсь запустить его на iPad 2 или iPad Сетчатка дает 4 ошибки (2 разных ошибки, каждая по два раза):
/* Scale and crop image */
func imageByScalingAndCroppingForSize(#originalImage: UIImage, size:CGSize) -> UIImage {
let sourceImage = originalImage
var newImage: UIImage
let imageSize: CGSize = sourceImage.size
let width: Double = Double(imageSize.width)
let height: Double = Double(imageSize.height)
var targetWidth: Double = Double(size.width)
var targetHeight: Double = Double(size.height)
var scaleFactor: Double = 0.0
var scaledWidth: Double = targetWidth
var scaledHeight: Double = targetHeight
var thumbnailPoint: CGPoint = CGPointMake(0.0, 0.0)
if (imageSize != size) {
let widthFactor: Double = Double(targetWidth / width)
let heightFactor: Double = Double(targetHeight / height)
if (widthFactor > heightFactor) { // Scale to fit height
scaleFactor = widthFactor
}else{ // Scale to fit width
scaleFactor = heightFactor
}
scaledWidth = Double(width * scaleFactor)
scaledHeight = Double(height * scaleFactor)
// Center the image
if (widthFactor > heightFactor) {
thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5 // Could not find an overload for '*' that accepts the supplied arguments
}else{
if (widthFactor < heightFactor) {
thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5 // Could not find an overload for '*' that accepts the supplied arguments
}
}
}
UIGraphicsBeginImageContext(size)
var thumbnailRect: CGRect = CGRectZero
thumbnailRect.origin = thumbnailPoint
thumbnailRect.size.width = scaledWidth // Cannot convert the expression's type '()' to type 'CGFloat'
thumbnailRect.size.height = scaledHeight // Cannot convert the expression's type '()' to type 'CGFloat'
sourceImage.drawInRect(thumbnailRect)
newImage = UIGraphicsGetImageFromCurrentImageContext()
if (newImage == nil) {
println("could not scale image")
}
// pop the context to get back to the default
UIGraphicsEndImageContext()
return newImage
}
2 ответа
Решение
Для обеих ошибок попробуйте создать новый CGFloat
s.
CGFloat(0.5)
CFFloat(scaledWidth)
Причина этого заключается в том, что Double неявно приводится к CGFloat на 32-битной. Это однако на 64 бит.
Вы можете использовать явные типы, такие как var x:CGFloat
вместо неявного вывода, поскольку все числа с десятичными числами становятся двойными независимо от архитектуры.