2014-06-13 20 views
45

Tôi đã có một lớp con của UIViewController được viết bằng Swift được gọi là 'BaseViewController'. Bây giờ tôi có một bộ điều khiển xem 'cũ' được gọi là 'ViewController1' được viết trong Objective-C mà tôi muốn kế thừa từ 'BaseViewController'. Theo lời khuyên khác, tôi đã nhập tệp tiêu đề 'Project-Swift.h'.trộn mục tiêu-c và nhanh chóng khi phân lớp

Vấn đề của tôi xảy ra khi lớp con như thế này

#import <UIKit/UIKit.h> 
#import "MyProject-Swift.h" 

@interface ViewController1 : BaseViewController 
@end 

Lỗi này là:

Không thể phân lớp một lớp học với objc_subclassing hạn chế thuộc tính

và nó xuất hiện trên @ interface ... dòng .

+0

Viết một lớp cha mới cho một lớp học hiện có vẻ như một chút lạ với tôi ... – nhgrif

+0

Tôi nghĩ rằng câu hỏi OP là chỉ là về làm thế nào để có một lớp Objective-C thừa kế một lớp Swift, đó là không thể –

Trả lời

80
+3

Cảm ơn ! Bỏ lỡ điều đó - vì vậy không có cách nào để từ từ di chuyển các dự án cũ và mới sang Swift mà không cần viết lại hoàn toàn :). – apotry

+2

Bạn có thể phân lớp lớp Objective-C trong Swift. Bắt đầu từ phía dưới và làm việc theo cách của bạn lên. – nhgrif

+1

Không cần phải viết lại. Bạn có thể sử dụng lớp khách quan nhanh chóng vì nó đang sử dụng tiêu đề cầu nối c mục tiêu –

9

Bạn không thể phân lớp lớp Swift trong Mục tiêu-C. cf. về phía cuối của this section of the docs:

Tuy nhiên, lưu ý rằng bạn không thể phân lớp lớp Swift trong mục tiêu-C.

0

Đây là một lỗi biên dịch, vì vậy U không thể phân lớp một lớp nhanh chóng trong objc.

SWIFT_CLASS("_TtC6Swifty14ViewController") 
@interface ViewController : UIViewController 
@end 


# if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) 
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA 
# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 
# else 
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 
# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 
# endif 
#endif 
Các vấn đề liên quan