Tôi đang gặp phải lỗi mà tôi không chắc chắn nếu đó là giới hạn của ngôn ngữ Swift hoặc lỗi. Đây là tiền đề cơ bản nhất:Phân lớp Swift Generic Class với sự thừa kế NSObject
class GenericClass<T> : NSObject {
var inputValue: T
init(value: T) {
self.inputValue = value
super.init()
}
}
class SubClass : GenericClass<String> {
override init(value: String) {
super.init(value: value)
}
}
var test = GenericClass(value: "test") //Succeeds
var test2 = SubClass(value: "test2") //Fails with EXC_BAD_ACCESS
Tôi không nhận được cảnh báo trình biên dịch ở đây, nhưng Lớp con từ chối khởi tạo. Tôi có một mục tiêu phức tạp hơn trong việc phân lớp các bối cảnh cụ thể của một chung chung, nhưng vấn đề cơ bản ở trên là những gì tôi đã đun nó xuống.
Thật thú vị, nếu tôi loại bỏ thừa kế NSObject trên GenericClass (và super.init() từ phương thức init chung), thiết lập này hoạt động mà không có vấn đề, vì vậy tôi nghĩ rằng nó phải liên quan đến thực tế mà tôi đang kế thừa từ NSObject. Việc thực hiện đầy đủ của tôi PHẢI kế thừa từ một NSOperation (về cơ bản tôi đang tạo các lớp NSOperation tùy chỉnh với một siêu lớp chung), vì vậy kế thừa từ NSObject (tức là NSOperation) không phải là tùy chọn cho tôi.
Thật khó chịu khi không có lỗi trình biên dịch và tôi nhận được thứ gì đó khó chịu như EXC_BAD_ACCESS. Nó làm cho tôi nghĩ rằng có lẽ đây là nghĩa vụ phải làm việc, nhưng không phải là hiện tại. Tôi biết họ chỉ mới bắt đầu hỗ trợ các lớp con của các lớp chung trong Swift. Tôi đang chạy phiên bản beta xCode mới nhất 6.
Bất kỳ thông tin chi tiết nào được đánh giá cao!
Cảm ơn câu trả lời Aaron. Tôi đồng ý, nó có mùi như một con bọ. Tôi đã gửi báo cáo lỗi. Chúng tôi sẽ xem điều gì xảy ra :) Sẽ cung cấp cho ý tưởng giao thức của bạn một shot trong thời gian chờ đợi. – erendiox
Vâng, tôi tin rằng đây thực sự là một lỗi. Nó bây giờ đã được sửa trong Swift 3, và không có đề cập đến nó trong Swift 3 Language Changes: https://swift.org/blog/swift-3-0-released/ – ganzogo