Подтвердить что ты не робот

Преобразование CGFloat в NSNumber в Swift

У меня есть расширение в Swift, которое содержит некоторые свойства, которые являются CGFloat. Проблема в том, что я не знаю, как получить значение CGFloat в хранилище как NSNumber с помощью связанных объектов

Вот код, который у меня есть, который не работает, но он детализирует, что я хочу сделать:

var scaledFontSize: CGFloat {
    get {
        guard let fontSize = objc_getAssociatedObject(self, &AssociatedKeys.scaledFontSize) as? NSNumber else {
            //Set it
            let scaledFont:CGFloat = VGSizeValues.getValueFromValue(self.font.pointSize);
                //Fails here
            objc_setAssociatedObject(self,&AssociatedKeys.scaledFontSize, NSNumber( scaledFont),objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
            return scaledFont;
        }
        return CGFloat(fontSize.doubleValue);

    }
}

Есть ли способ обойти это?

4b9b3361

Ответ 1

В Swift 3.0

let myFloat : CGFloat = 1234.5

let myNumber = NSNumber(value: Float(myFloat))

или

let myNumber = NSNumber(value: Double(myFloat))

В Swift 2

let myNumber = NSNumber(double: myFloat.native)

или

let myNumber = NSNumber(double: Double(myFloat))

или

let myNumber = NSNumber(float: Float(myFloat))

Ответ 2

Для Swift 3.1

var final_price: CGFloat = 12.34
let num = final_price as NSNumber

Ответ 3

Swift 3

let myNumber = NSNumber(value: Float(myCGFloat))

Ответ 4

Для меня это сработало.

self.configuration.cellHeight as NSNumber!

Ответ 5

Вы можете получить доступ к CGFloat NativeType через свойство native:

public var native: CGFloat.NativeType

Собственный тип, используемый для хранения CGFloat, который является Float для 32-разрядных архитектур и Double для 64-разрядных.

С этим вы можете создать NSNumber примерно так:

NSNumber(value: cgFloat.native)