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 ответа

Решение

Для обеих ошибок попробуйте создать новый CGFloats.

CGFloat(0.5)
CFFloat(scaledWidth)

Причина этого заключается в том, что Double неявно приводится к CGFloat на 32-битной. Это однако на 64 бит.

Вы можете использовать явные типы, такие как var x:CGFloat вместо неявного вывода, поскольку все числа с десятичными числами становятся двойными независимо от архитектуры.

Другие вопросы по тегам