2016-07-12 23 views
42

Hiện tại, CGRectMake, CGPointMake, CGSizeMake, v.v. đã bị xóa trong Swift 3.0, có cách nào để tự động cập nhật tất cả các khởi tạo như từ CGRectMake(0,0,w,h) to CGRect(x:0,y:0,width:w,height:h) hay không. Quá trình thủ công là .. khá đau.Cập nhật CGRectMake thành CGRect trong Swift 3 Tự động

Không chắc tại sao Apple không tự động chuyển đổi này khi tôi chuyển đổi mã để Current Swift Cú pháp ...

+3

Chuyển đổi thành Cú pháp Swift hiện tại hoạt động cho tôi và chuyển đổi 'CGRectMake (0,0, w, h)' sang 'CGRect (x: 0, y: 0, width: w, height: h)'. Nếu nó không hoạt động trong trường hợp của bạn thì bạn nên gửi báo cáo lỗi. –

Trả lời

17

Apple thực sự cung cấp tính năng này. Tất cả bạn phải làm là đi đến:

Sửa>Chuyển đổi>Để Latest Swift Cú pháp ...

enter image description here

Và sau đó làm theo các hướng dẫn trên màn hình.

Điều này sẽ giải quyết các vấn đề cú pháp của bạn và bạn sẽ không phải thực hiện các chức năng mới cho tất cả các chức năng bị loại bỏ khác nhau.

+1

nó không yeah! vì một số lý do khi tôi chuyển đổi lần đầu tiên, một số tệp đã không được chuyển đổi. Nhưng khi tôi chạy một lần nữa, nó đã làm! Tôi đoán phải chạy nhiều lần cho đến khi tất cả các tập tin của bạn được chuyển đổi .. – yonasstephen

+0

nó không làm điều đó cho tôi, tôi đã nhiều hơn một lần và thậm chí sau khi thực hiện một số thay đổi. – nights

64

Giải pháp đơn giản nhất có lẽ là chỉ để xác định lại chức năng của Apple lấy đi. Ví dụ:

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

Đặt điều đó vào mô-đun của bạn và tất cả cuộc gọi đến CGRectMake sẽ hoạt động trở lại.

+0

hmm thật tuyệt! hãy để tôi xem những gì người khác nghĩ; nếu không, tôi sẽ chấp nhận câu trả lời của bạn! – yonasstephen

+0

Tôi đã chờ PaintCode cập nhật lên Swift 3. Với tất cả 'CGRectMake' trong đó, đây là giải pháp tốt nhất. –

+0

Tại sao có một CGRectMake ở nơi đầu tiên nếu bạn có thể bắt đầu với CGRect theo cùng một cách, tôi không nhận được nó –

28

Câu trả lời ngắn gọn: không thực hiện. Đừng để Apple làm bạn xung quanh. Tôi ghétCGRect(x:y:width:height:). Tôi đã gửi một lỗi trên đó. Tôi nghĩ bộ khởi tạo phải là CGRect(_:_:_:_:), giống như CGRectMake. Tôi đã xác định một phần mở rộng trên CGRect cung cấp nó, và mở rộng phần mở rộng đó thành mỗi dự án duy nhất ngay khi tôi bắt đầu.

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

Bằng cách đó, tất cả những gì tôi phải làm là thay đổi "CGRectMake" thành "CGRect" ở mọi nơi và tôi đã hoàn tất.

+1

Cảm ơn câu trả lời hữu ích tuyệt vời này ... Bạn đã tiết kiệm thời gian của tôi. –

+0

Tôi có thể thêm phần mở rộng này ở đâu? thay vào đó, tôi sử dụng nó như thế nào? cảm ơn – nights

+0

@nights, bên ngoài mọi lớp học –

Các vấn đề liên quan