web-dev-qa-db-ja.com

Swift 3のCGRectMakeをCGRectに自動的に更新する

CGRectMake、CGPointMake、CGSizeMakeなどがSwift 3.0で削除されたため、CGRectMake(0,0,w,h) to CGRect(x:0,y:0,width:w,height:h)のようなすべての初期化を自動的に更新する方法があります。手動プロセスは非常に苦痛です。

コードをCurrent Apple構文に変換するときにSwiftが自動変換しない理由がわからない...

50
yonasstephen

Appleは実際にこの機能を提供しています。あなたがしなければならないのはに行くことです:

Edit>Convert>To最新のSwift構文...

enter image description here

そして、画面上のプロンプトに従います。

これにより構文の問題が解決され、削除されたさまざまな関数すべてに対して新しい関数を作成する必要がなくなります。

17
WMios

最も簡単な解決策は、おそらくAppleが取り除いた関数を再定義することです。例:

func CGRectMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect {
    return CGRect(x: x, y: y, width: width, height: height)
}

それをモジュールに入れると、CGRectMakeへのすべての呼び出しが再び機能します。

78
rob mayoff

短い答え:それをしないでください。 Appleを上司にさせないでください。私嫌いCGRect(x:y:width:height:)。バグを報告しました。イニシャライザは、CGRectMakeのようにCGRect(_:_:_:_:)である必要があると思います。私はCGRectでそれを提供する拡張機能を定義し、その拡張機能をすべての単一プロジェクト開始した瞬間に挿入しました。

extension CGRect {
    init(_ x:CGFloat, _ y:CGFloat, _ w:CGFloat, _ h:CGFloat) {
        self.init(x:x, y:y, width:w, height:h)
    }
}

そうすれば、「CGRectMake」を「CGRect」に変更するだけで、すべて完了です。

31
matt