Swift:CGRect,CGSize&CGPoint

あなたは(おそらく)間違っています

Andyy Hope
Andyy Hope

Follow

私が最初にswiftワームホールに完全にジャンプすることを決めてから、約8ヶ月が経ちました。 その数ヶ月の間、私はSwift構文でObjective-Cスタイルのコードパターンを書くのをやめることをゆっくりと学び、実際に新しい言語を利用し始めました。しかし、私が最近拾ったことの1つは、私はまだすべてのCGGeometry構造体で醜い非Swiftのような構文を使用していることです。

CGRect, CGSize, CGPoint

C構文。 狼の服を着た羊

私は、多くのSwift開発者がこれを犯していると大きな気持ちを持っています。 あなたのコードでこれらのいずれかを使用している場合は、手を上げてください:更新:Swift3の時点で、これらの関数は削除されています。p>

うん、私はそう思った。 しかし、心配しないでください、それは恥ずかしいことは何もありません…まだ。

これが間違っているのは、Swiftのコーディング規約を破ることですが、それでも動作しますが、Objective-Cに属している場合や、あえて言うとJavaに似ています。 *shudders*

経験豊富なiOSまたはOSX開発者に、短い一見で、彼らは簡単にそのコードが何をしているかを伝えることができます。 誰もがこれらの引数とそのシーケンスを知っているので、CGGeometry構造体に引数ラベルは必要ありません。 そうでないことを除いて。

Swiftが何であるかの多くは、言語の初心者だけでなく、完全なプログラミングの初心者にも友好的であることです。 彼らがそのコードを見るならば、彼らはそれらの数字が何を表しているのか分からないでしょう。 それでは、良いSwift市民であることを誓い、Swiftバージョンの使用を開始しましょう。

let rect = CGRect(x: 0, y: 0, width: 100, height: 100)let size = CGSize(width: 100, height: 100)let point = CGPoint(x: 0, y: 0)

少し余分な構文については、コードの冗長性は一見 また、CGGeometryCGFloatIntDoubleを渡すこともできるということです。

ゼロ

let rect = CGRectZerolet size = CGSizeZerolet point = CGPointZero

更新:Swift3の時点で、これらの関数は削除されています。p>

私たちがそれをしている間、あなたはおそらくまだこれらも使用していますか、amirite? レルまた、これらを更新して、より新しい、より迅速な構文を使用する必要があります。 しかし、心配しないでください、構文は単なる余分な文字だけです。 あなたはそれが何であるかを推測できますか?これであなたをボードに乗せるもう一つのことは、Xcodeのシンタックスハイライターは、あなたの配色に応じて、.zeroを強調表示し、認知負荷を少し軽くすることです。

値の取得

CGRect frame = CGRectMake(0, 0, 100, 100)CGFloat width = CGRectGetWidth(frame)CGFloat height = CGRectGetHeight(frame)CGFloat maxX = CGRectGetMaxX(frame)CGFloat maxY = CGRectGetMaxY(frame)

更新:Swift3の時点で、これらの関数は削除されています。あなたがObjective-Cの優れた市民であるか、まだ優れている場合は、rectの特定の値が必要なときにこれらの値ゲッターを使用していたでしょう。 しかし、ちょっと待って、値に直接アクセスしないのはなぜですか?

CGFloat width = frame.size.widthCGFloat height = frame.size.height

このため、アプリケーションはCGRectデータ構造に格納されているデータを直接読み書きすることは避けてください。 代わりに、ここで説明する関数を使用して長方形を操作し、その特性を取得します。

-Apple,CGGeometry Reference Documentation

そのような手続きを気にしなかったあなたの多くはまだおそらくまだありますが、それは大丈夫です。 Swiftは、このような気取らないAPIの私たちを軽減し、代わりに単純なドット表記変数を提供しています。この投稿を補足するために提供したSwift playgroundsには、これらの細かい点の例がたくさんあります。 リンクはページの下部に表示されます。

Mutability

let frame = CGRect(x: 0, y: 0, width: 100, height: 100)let view = UIView(frame: frame)view.frame.origin.x += 10

ビューのフレームの個々の値を変更できるだけでなく、サブ構造体全体を完全に置き換えることもできます。 見よ:

let view = UIView(frame: .zero)view.frame.size = CGSize(width: 10, height: 10)view.frame.origin = CGPoint(x: 10, y: 10)

この小さな機能だけで、Objective-Cの使用を停止するのに十分な理由です。CGRect新しいものを完全に作成して値をリセッ Objective-Cの開発者として、このようなフレーム変更コードを書くことを余儀なくされたのは、わずか二年前でした:私はあなたのことを知らないが、それを書くことは本当に私を強調した。

CGRect frame = CGRectMake(0, 0, 100, 100);UIView *view = initWithFrame: frame];CGRect newFrame = view.frame;newFrame.size.width = view.frame.origin.x + 10;view.frame = newFrame;

私はあなたのことを知らないが、それを書くことは 作成newFrameviewframeview再び。 いいえ、二度としないでください、あなたに感謝しません。

忘れないでください

UIKit内には、これらの変更が適用される他の構成要素もいくつかあります。

UIEdgeInsets var edgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
edgeInsets.top += 10UIOffsetvar offset = UIOffset(horizontal: 10, vertical: 10)
offset.vertical += 10

コメントを残す

メールアドレスが公開されることはありません。