2016-07-12 10 views
42

Swift 3.0でCGRectMake、CGPointMake、CGSizeMakeなどが削除されたので、CGRectMake(0,0,w,h) to CGRect(x:0,y:0,width:w,height:h)のようにすべての初期化を自動的に更新する手段はありますか?手作業はかなり痛いです。Swift 3で自動的にCGRectMakeをCGRectに更新する

ない私はスイフトカレント構文にコードを変換するときに、Appleはこれを自動変換しない理由を確認してください...

+3

現在のSwift構文に変換し、 'CGRectMake(0,0、w、h)'を 'CGRect(x:0、y:0、width:w、height:h)'に変換します。あなたのケースでうまくいかない場合は、バグレポートを提出する必要があります。 –

答えて

17

Appleは実際にこの機能を提供しています。

編集>...最新のスウィフト構文に>変換

enter image description here

そして、画面の指示に従ってください:あなたがしなければならないに行くです。

これは構文の問題を解決し、削除されたさまざまな機能のすべてに対して新しい機能を追加する必要はありません。

+1

それはそうです!私が最初に変換するときに何らかの理由で、変換されなかったファイルがありました。しかし、私が再び走った時、それはやった!私はあなたのすべてのファイルが変換されるまで複数回実行する必要があります.. – yonasstephen

+0

それは私のためにそれをやっていない、私はいくつかの変更を加えた後に複数回しています。 – nights

64

最も簡単な解決策は、ちょうどAppleが奪った関数を再定義することが考えられます。例:

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

CGRectMakeへのすべてのコールが再び機能します。

+0

うーん、それはクールです!他の人の考えを見せてください。そうでなければ、私はあなたを答えとして受け入れます! – yonasstephen

+0

私はPaintCodeがSwift 3に更新されるのを待っていました。そこにはすべてのCGRectMakeがあり、これは最高の解決策でした。 –

+0

CGRectで初期化できるのはなぜですか?私はそれを取得しません –

28

短い回答:しないでください。 Appleがあなたにボスを抱かせてはいけません。 I 嫌いCGRect(x:y:width:height:)。私はそれにバグを提出しました。私は、CGRectMakeのように、イニシャライザはCGRect(_:_:_:_:)でなければならないと思います。私はそれを提供するCGRectの拡張を定義し、その拡張子をに1つのプロジェクトごとにに開始すると定義しました。

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

こうして、「CGRectMake」をどこでも「CGRect」に変更すれば完了です。

+1

この有益な答えをありがとう...あなたは私の時間を救った。 –

+0

どこにこの拡張機能を追加できますか?むしろ、どうやって使うのですか?ありがとう – nights

+0

@nights、クラス外 –

関連する問題