2014-10-17 16 views
18

Tôi có một UITableViewCel tùy chỉnh (không có gì ưa thích) hoạt động hoàn hảo trên Xcode 6.0. Khi tôi cố gắng biên dịch nó với Xcode 6.1 trình biên dịch cho thấy lỗi sau:Trình khởi tạo có sẵn trong Xcode 6.1

A non-failable initializer cannot chain to failable initializer 'init(style:reuseIdentifier:)' written with 'init?'

Đây là mã của tế bào:

class MainTableViewCell: UITableViewCell { 

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
     super.init(style: style, reuseIdentifier: reuseIdentifier) 
     self.setup() 
    } 

    required init(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     self.setup() 
    } 

    func setup() {<...>} 
} 

Là một giải pháp trình biên dịch đề xuất Propagate the failure with 'init?':

override init?(style: UITableViewCellStyle, reuseIdentifier: String?) { 
    super.init(style: style, reuseIdentifier: reuseIdentifier) 
    self.setup() 
} 

Tôi hơi bối rối. Có thể xây dựng (non)failable initialiser là gì và cách sử dụng và ghi đè nó?

+1

Bạn đang nói về Xcode 6.0 và 6.1? –

+0

Vâng, bạn nói đúng, gần như là một đêm mà tôi đang ở và tôi hơi buồn ngủ. :) –

+1

Ngoài ra, như tôi đã hiểu, bạn nên đặt lệnh gọi super.init ở cuối hàm. Tôi đoán nếu bạn không có bất kỳ tài sản, sau đó nó không quan trọng. –

Trả lời

26

Với Swift 1.1 (trong Xcode 6.1) Apple đã giới thiệu công cụ khởi tạo có sẵn - tức là, trình khởi tạo có thể trả về nil thay vì một phiên bản. Bạn xác định trình khởi tạo khả dụng bằng cách đặt ? sau init. Initializer bạn đang cố gắng để ghi đè lên thay đổi chữ ký của mình giữa Xcode 6.0 và 6.1:

// Xcode 6.0 
init(style: UITableViewCellStyle, reuseIdentifier: String?) 

// Xcode 6.1 
init?(style: UITableViewCellStyle, reuseIdentifier: String?) 

Vì vậy, để ghi đè lên bạn sẽ cần phải thực hiện những thay đổi tương tự để khởi tạo của bạn, và chắc chắn rằng để xử lý các trường hợp nil (bởi gán cho một tùy chọn) khi tạo một ô theo cách đó.

Bạn có thể đọc thêm về failable initializers in Apple's documentation.

+3

Bạn đề nghị xử lý trường hợp nil như thế nào? –

+0

khoảng 6.3 ?? –

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