หลังจากแปลงรหัสเป็น swift 3.0 ล่าสุดฉันได้แสดงข้อผิดพลาด
บอกวิธีแก้ปัญหาให้ฉันด้วย CGSize = CGSizeMake(0,0)
static var frameAtStartOfPan: CGRect = CGRectZero
static var startPointOfPan: CGPoint = CGPointZero
ซึ่งยังใช้งานไม่ได้
หลังจากแปลงรหัสเป็น swift 3.0 ล่าสุดฉันได้แสดงข้อผิดพลาด
บอกวิธีแก้ปัญหาให้ฉันด้วย CGSize = CGSizeMake(0,0)
static var frameAtStartOfPan: CGRect = CGRectZero
static var startPointOfPan: CGPoint = CGPointZero
ซึ่งยังใช้งานไม่ได้
คำตอบ:
CGRect
สามารถสร้างเพียงแค่ใช้ตัวอย่างของ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))
หรือถ้าเราต้องการระบุแต่ละค่าใน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
แก้ไขด่วนสำหรับ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 ไม่ให้การแปลงอย่างรวดเร็วจากSwift 2+เป็นSwift 3
ในสวิฟท์ 3 คุณก็สามารถใช้CGPoint.zero
หรือCGRect.zero
ในสถานที่หรือCGRectZero
CGPointZero
อย่างไรก็ตามใน Swift 4 CGRect.zero
และ'CGPoint.zero'
จะทำงาน
หากคุณต้องการใช้มันในแบบที่รวดเร็วคุณสามารถใช้ funcs เหล่านี้:
สำหรับ 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)
}
เพียงแค่วางพวกเขานอกชั้นเรียนใด ๆ และควรจะทำงาน (ทำงานให้ฉันอย่างน้อย)
โครงสร้างเช่นเดียวกับสัญลักษณ์อื่น ๆ ทั้งหมดในคอร์กราฟิกส์และ 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 ที่มากขึ้นเมื่อเรียกใช้เฟรมเวิร์กโกโก้ เฟรมเวิร์กยอดนิยม Core Graphics และ Grand Central Dispatch มีอินเตอร์เฟสที่ใหม่และสะอาดกว่าใน Swift
ลองทำสิ่งต่อไปนี้:
var myToolBar = UIToolbar.init(frame: CGRect.init(x: 0, y: 0, width: 320, height: 44))
นี่เป็นเวอร์ชั่นล่าสุดของ swift
โบนัส Swift 3:ทำไมไม่มีใครพูดถึงรูปแบบย่อ
CGRect(origin: .zero, size: size)
.zero
แทน CGPoint.zero
เมื่อกำหนดประเภทแล้วคุณสามารถละเว้นได้อย่างปลอดภัย
คุณสามารถใช้สิ่งนี้แทน CGRectZero
CGRect.zero
ใน Swift 4มันทำงานเหมือนด้านล่าง
collectionView.setContentOffset(CGPoint.zero, animated: true)
สำหรับ CGSize
CGSize(width: self.view.frame.width * 3, height: self.view.frame.size.height)