Làm việc trên một khuôn khổ hỗn hợp. được nhập vào bên trong tệp Obj-C nhưng các lớp bên trong không hiển thị, chỉ các lớp công khai.Làm thế nào để truy cập một lớp Swift bên trong trong Objective-C trong cùng một khuôn khổ?
Các tài liệu nêu rõ về clasees nội bộ nên có sẵn giữa Swift và obj-C:
Nhập Swift vào Objective-C
Để nhập một tập các file Swift trong mục tiêu cùng một khuôn khổ như của bạn Mã mục tiêu-C, bạn không cần cần phải nhập bất kỳ thứ gì vào tiêu đề ô cho khung. Thay vào đó, hãy nhập tệp tiêu đề do Xcode tạo cho mã Swift của bạn vào bất kỳ tệp Mục tiêu-C .m nào mà bạn muốn sử dụng mã Swift của mình. Vì tiêu đề được tạo cho mục tiêu khung là một phần của giao diện công khai của khung công tác , chỉ các khai báo được đánh dấu bằng công cụ sửa đổi công khai mới xuất hiện trong tiêu đề được tạo cho mục tiêu khung. Bạn vẫn có thể sử dụng phương pháp Swift và tài sản mà được đánh dấu bằng sửa đổi nội bộ từ bên trong phần Objective-C của khuôn khổ của bạn, miễn họ được khai báo trong một lớp kế thừa từ một lớp Objective-C . Để biết thêm thông tin về các công cụ sửa đổi cấp truy cập, hãy xem Access Control trong The Swift Programming Language (Swift 2).
Mã mẫu (Tạo một dự án mới với một khuôn khổ)
// SwiftObject.swift
public class SwiftObject: NSObject {
public class func doSomething() {}
}
internal class YetAnotherSwiftObject: NSObject {
internal class func doSomething() {}
}
// SomeObject.m file
@implementation SomeObject
- (void)someMethod {
[SwiftObject doSomething];
}
- (void)someOtherMethod {
[YetAnotherSwiftObject doSomething]; // Use of undeclared identifier
}
@end
Tuyệt vời! Tôi không biết về vĩ mô và google không hiển thị nhiều. Bạn có bất kỳ tham chiếu nào từ tài liệu của Apple không? – Yariv
Đẹp? Điều này là khủng khiếp tiết và lộn xộn. Đây có thực sự là những gì bạn cần làm không? Tôi đã gặp phải vấn đề tương tự, và thậm chí cả táo cũng phải cố gắng làm điều gì đó tốt hơn thế này. Tôi sẽ từ bỏ điều này và quay trở lại mục tiêu c, điều này là không hợp lý! +1 để đăng nội dung nào đó thực sự hoạt động (sau giờ tìm kiếm). –
Theo tài liệu của Apple "Bạn vẫn có thể sử dụng các phương thức và thuộc tính Swift được đánh dấu bằng công cụ sửa đổi nội bộ từ bên trong phần Objective-C của khung công tác của bạn, miễn là chúng được khai báo trong một lớp kế thừa từ một lớp Objective-C", nếu lớp nhanh có nguồn gốc từ một lớp objc khác, nó sẽ có sẵn trong mã objc. Tôi có vấn đề tương tự và tôi đã đánh dấu lớp học nhanh chóng của tôi với @objc và nó kế thừa từ NSObject nhưng vẫn không có sẵn trong mã objc. – puru020