CGRectMake、CGPointMake、CGSizeMake、CGRectZero、CGPointZeroはSwiftでは使用できません


242

コードを最新のSwift 3.0に変換した後、このエラーが表示されます。

ここに画像の説明を入力してくださいここに画像の説明を入力してください

また、解決策を教えてください CGSize = CGSizeMake(0,0)

static var frameAtStartOfPan: CGRect = CGRectZero
static var startPointOfPan: CGPoint = CGPointZero

これも利用できません。


しかし、以前のコードをswift3に変換した後、この問題が発生しました。更新されたバージョンで構文に変更があるかどうかを知りたいです
niravdesai21

回答:


493

CGRect以下に示すa CGPointまたはのインスタンスを使用して簡単に作成できCGSizeます。

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

// Or

let rect = CGRect(origin: .zero, size: CGSize(width: 100, height: 100))

または、CGFloator DoubleまたはIntで各値を指定する場合は、このメソッドを使用できます。

let rect = CGRect(x: 0, y: 0, width: 100, height: 100) // CGFloat, Double, Int

CGPoint このように作成できます。

 let point = CGPoint(x: 0,y :0) // CGFloat, Double, Int

CGSize このように作成できます。

let size = CGSize(width: 100, height: 100) // CGFloat, Double, Int

サイズとポイントも0を値として、このようにできます。

let size = CGSize.zero // width = 0, height = 0
let point = CGPoint.zero // x = 0, y = 0, equal to CGPointZero
let rect = CGRect.zero // equal to CGRectZero

CGRectZeroCGPointZeroに置き換えCGRect.zeroCGPoint.zeroSwift 3.0


CGSize = CGSizeMake(0,0)の解決策も教えてください。これは、Swift 3で起動していません
niravdesai21

@ niravdesai21質問を更新しました、確認してください。

CGPointZeroとCGRectZeroもそのためのソリューションはありませんか?更新された質問回答を更新してください
niravdesai21 '06 / 06/22

@ niravdesai21更新されました。

4
「CGRectZeroはSwiftでは使用できません」というのは、実際にCGRect.zeroへの構文変更である場合は冗談です。これらの人たちはコンパイル警告を大々的に処理する必要があります...彼らはスタックオーバーフローに依存して絶えず救済しています
Magoo

49

クイックフィックスCGRectMake、CGPointMake、CGSizeMakeSwift3&iOS10

これらの拡張子を追加します。

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

}
extension CGSize{
    init(_ width:CGFloat,_ height:CGFloat) {
        self.init(width:width,height:height)
    }
}
extension CGPoint{
    init(_ x:CGFloat,_ y:CGFloat) {
        self.init(x:x,y:y)
    }
}

その後「に進みます。ワークスペースで検索と置換検索」CGRectMake、CGPointMake、CGSizeMakeとでそれらを置き換えCGRect、するCGPoint、CGSizeを

XcodeはSwift 2+からSwift 3への迅速な変換を提供していないため、これらのステップはすべての時間を節約できます。


素晴らしいソリューション!
オプリマス2017

@Oprimusが面倒を軽減してくれることを願っています:)
Rafat touqir Rafsun 2017

26

Swift 3では、CGPoint.zeroまたはのCGRect.zero代わりにCGRectZeroまたはを使用できますCGPointZero

しかし、スウィフト4で、CGRect.zeroかつ'CGPoint.zero'動作します


1
@ChewieTheChorkie正解です。「唯一の」単語で混乱が生じたので削除しました。
グル、

12

Swift 2のようにそれらを使用したい場合は、次の関数を使用できます。

CGRectMakeの場合:

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

CGPointMakeの場合:

func CGPointMake(_ x: CGFloat, _ y: CGFloat) -> CGPoint {
    return CGPoint(x: x, y: y)
}

CGSizeMakeの場合:

func CGSizeMake(_ width: CGFloat, _ height: CGFloat) -> CGSize {
    return CGSize(width: width, height: height)
}

それらをクラスの外に置くだけで動作します。(少なくとも私にとってはうまくいく)


9

コアグラフィックスやその他のAPIの構造やその他のすべてのシンボルが明確になり、パラメーター名も含まれています。 https://developer.apple.com/reference/coregraphics#symbols

CGRect(x: Int, y: Int, width: Int, height: Int)
CGVector(dx: Int, dy: Int)
CGPoint(x: Double, y: Double)
CGSize(width: Int, height: Int)

CGPointの例:

let newPoint = stackMid.convert(CGPoint(x: -10, y: 10), to: self)

CGVectorの例:

self.physicsWorld.gravity = CGVector(dx: 0, dy: gravity)

CGSizeの例:

hero.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 16, height: 18))

CGRectの例:

let back = SKShapeNode(rect: CGRect(x: 0-120, y: 1024-200-30, width: 240, height: 140), cornerRadius: 20)

アップルブログ

Swift 3でのSwift構文とAPIの名前変更の変更により、言語がより自然に感じられ、Cocoaフレームワークを呼び出すときにSwift-yエクスペリエンスがさらに提供されます。人気のあるフレームワークであるコアグラフィックスとグランドセントラルディスパッチには、Swiftの新しい、よりすっきりしたインターフェイスがあります。


5

以下を試してください:

var myToolBar = UIToolbar.init(frame: CGRect.init(x: 0, y: 0, width: 320, height: 44))

これはSwiftの最新バージョン用です


それと同じように(Y)、自動補完の方が簡単です
Husam

5

Swift 3ボーナス:なぜショートフォームに言及しなかったのですか?

CGRect(origin: .zero, size: size)

.zero の代わりに CGPoint.zero

タイプが定義されたら、安全に省略できます。



0

Swift 4では以下のように機能します

collectionView.setContentOffset(CGPoint.zero, animated: true)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.