1. ホーム
  2. swift

[解決済み] Swift で CGFloat を切り上げる

2023-03-13 13:53:13

質問

どのように私はSwiftでCGFloatを丸めることができますか? 私は試してみました ceil(CDouble(myCGFloat)) を試しましたが、それはiPad Air & iPhone 5Sでしか動作しません。

別のシミュレートされたデバイスで実行すると、次のようなエラーが発生します。 'NSNumber' is not a subtype of 'CGFloat'

どのように解決すればよいですか?

更新 : Apple は現在、以下のような一般的な関数の CGFloat 固有のバージョンを定義しています。 ceil :

func ceil(x: CGFloat) -> CGFloat

...特に32/64ビットの違いに対処するために。もし、単に ceil をCGFloatの引数で使用すると、全てのアーキテクチャで動作するようになります。

私のオリジナルの回答です。

これはかなりひどいと思うのですが、誰か良い方法を思いつきますか? #if ではうまくいかないようです。 CGFLOAT_IS_DOUBLE ビルドコンフィギュレーションに限定されると思います。 条件付きコンパイルのドキュメントを見る限りでは .

var x = CGFloat(0.5)

#if arch(x86_64) || arch(arm64)
var test = ceil(x)
#else
var test = ceilf(x)
#endif