CGRectMake, CGPointMake, CGSizeMake, CGRectZero, CGPointZero недоступны в Swift

После преобразования кода в последнюю версию swift 3.0 мне показывают эту ошибку.

Также скажите мне решение дляCGSize = CGSizeMake(0,0)

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

Что тоже недоступно.

 niravdesai2121 июн. 2016 г., 16:25
Но после преобразования моего предыдущего кода в swift3 я получил эту проблему, хотел бы знать, есть ли какие-либо изменения в синтаксисе в обновленной версии

Ответы на вопрос(9)

вы можете использовать эти функции:

Для 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)
}

Просто поместите их вне любого класса, и это должно работать. (У меня работает как минимум)

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

Это дляСвифта Последняя версия

 Husam08 дек. 2016 г., 10:03
как это (Y), это будет проще для автозаполнения

CGRectMake, CGPointMake, CGSizeMake вSwift3 и 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 прямо сейчас не дает нам быстрое преобразование изСвифт 2+ вСвифт 3

 Oprimus02 авг. 2017 г., 09:19
Гениальное решение!
 Rafat touqir Rafsun02 авг. 2017 г., 09:21
@Oprimus надеюсь, что это уменьшает ваши хлопоты :)
 Adrian P22 февр. 2017 г., 22:11
чертовски хорошая работа вокруг брата. + 1
 Rafat touqir Rafsun23 февр. 2017 г., 11:36
@AdrianP, спасибо, приятель
Решение Вопроса

CGRect Может быть просто создан с использованием экземпляраCGPoint или жеCGSize, это дано ниже.

 CGPoint(x: 0,y :0), size: CGSize(width: 100, height: 100))  

// Or

: .zero, size: CGSize(width: 100, height: 100))

Или если мы хотим указать каждое значение вCGFloat или же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

CGRectZero & CGPointZero заменено наCGRect.zero & CGPoint.zero вSwift 3.0.

 niravdesai2122 июн. 2016 г., 07:40
Можете ли вы также сказать мне решение для CGSize = CGSizeMake (0,0), который не просыпается в Swift 3
 niravdesai2122 июн. 2016 г., 08:10
CGPointZero и CGRectZero также не доступны какое-либо решение для этого? Обновленный вопрос, пожалуйста, обновите ответ
 user637514822 июн. 2016 г., 07:59
@ niravdesai21 Обновил вопрос, пожалуйста, проверьте.
 Magoo04 окт. 2016 г., 11:34
«CGRectZero недоступен в Swift», когда на самом деле это изменение синтаксиса CGRect.zero - шутка! Эти ребята должны поработать над своими предупреждениями о компиляции ... Они полагаются на переполнение стека, чтобы постоянно помогать им
 user637514823 июн. 2016 г., 08:16
@ niravdesai21 Я все еще удивляюсь, почему ты не принял ни одного ответа? Вам нужно больше разъяснений по этому простому вопросу?
 Code Different22 февр. 2017 г., 22:10
В вашем первом примере вы можете использовать сокращение так:let rect = CGRect(origin: .zero, size: CGSize(width: 100, height: 100))
 user637514822 июн. 2016 г., 09:36
@ niravdesai21 Обновлено.

В Swift 4 это работает как ниже

как и все другие символы в Core Graphics и других 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)

Блог Apple

Изменения в синтаксисе Swift и переименовании API в Swift 3 делают язык более естественным и предоставляют еще больше возможностей Swift-y при вызове фреймворков Cocoa. Популярные платформы Core Graphics и Grand Central Dispatch имеют новые, намного более чистые интерфейсы в Swift.

Свифт 3 Бонус: Почему никто не упомянул короткую форму?

.zero вместоCGPoint.zero

Когда тип определен, вы можете спокойно его пропустить.

Вы можете использовать это с заменой CGRectZero

CGRect.zero

CGPoint.zero или жеCGRect.zero на местеCGRectZero или жеCGPointZero.

Однако в Swift 4CGRect.zero а также'CGPoint.zero' буду работать

 Chewie The Chorkie27 июн. 2018 г., 21:15
CGPoint.zero отлично работает в моем Swift 4
 guru20 июл. 2018 г., 07:28
@ ChewieTheChorkie, вы правы, «единственное» слово создало путаницу, которую я удалил.

Ваш ответ на вопрос