2014-09-30 11 views
16

Tôi có lớp NSManagedObject do Xcode tạo cho mô hình CoreData của mình.Tại sao phần mở rộng của lớp Swift của tôi không hiển thị bên ngoài tệp xác định?

@objc(SomeClass) class SomeClass : NSManagedObject { /* ... */ } 

Được định nghĩa trong tệp có tên 'SomeClass.swift'. Tôi muốn mở rộng lớp này, vì vậy tôi đã tạo 'SomeClassExtension.swift'. Tôi xác định tiện ích mở rộng như thế này:

extension SomeClass { 
    class func typeMethod1() {} 
    func instanceMethod2() {} 
} 

Có thể sử dụng các phương pháp mở rộng này trong tệp xác định này, nhưng chúng không hiển thị bên ngoài tệp. Điều gì gây ra vấn đề này?

Trả lời

33

Có vẻ như tệp mới của bạn (SomeClassExtension.swift) không được đưa vào đúng mục tiêu. Kiểm tra kỹ thành viên đích của tệp bằng cách chọn tệp trong Xcode, sau đó mở "Trình kiểm tra tệp" (Xem trình đơn> Tiện ích> Hiển thị trình kiểm tra tệp). Đảm bảo các mục tiêu chính xác được chọn theo tiêu đề Mục tiêu thành viên.

+2

Tôi đã bỏ chọn mục tiêu và kiểm tra lại. Điều đó đã sửa nó cho tôi. – Sam

+0

không giúp đỡ ở đây – brainray

+0

Có ai tìm ra vấn đề là gì không? –

0

Tôi không thấy bất kỳ công cụ sửa đổi công khai nào trên các phương pháp đó.

+1

Mọi thứ trong Swift là "nội bộ" theo mặc định, do đó, các khai báo trong một tệp sẽ được hiển thị cho mã trong một tệp khác miễn là chúng là một phần của cùng một mục tiêu xây dựng. –

+0

Vâng đó thực sự là một điểm công bằng. Nếu mọi thứ trong cùng một mục tiêu, đó là. –

+0

@NateCook Xin chào, Nate. Vì vậy, có một cách để ẩn chi tiết định nghĩa và thực hiện (cho cả hai 'var' phương pháp quảng cáo) trong Swift như một trong những có thể làm trong Objective-C bằng cách đặt những thứ chỉ trong tập tin .m? Cảm ơn. – Unheilig

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