2015-06-29 27 views
6

Tôi có một typedef như vậy:Sử dụng obj-c typedef trong Swift

typedef NSString VMVideoCategoryType; 

extern VMVideoCategoryType *const VMVideoCategoryType_MusicVideo; 
extern VMVideoCategoryType *const VMVideoCategoryType_Audio; 
extern VMVideoCategoryType *const VMVideoCategoryType_Performance; 
extern VMVideoCategoryType *const VMVideoCategoryType_Lyric; 
extern VMVideoCategoryType *const VMVideoCategoryType_Show; 

Tôi đã bao gồm tập tin này trong phần đầu cầu nối. Tuy nhiên, khi tôi cố gắng truy cập VMVideoCategoryType trong một file Swift tôi nhận được một lỗi:

Use of undeclared type 'VMVideoCategoryType'

Có cách nào để làm cho công việc này hay tôi phải hoàn toàn tái xác định loại hình này ở Swift?

Trả lời

9

Tôi có chút suy đoán, nhưng lý do dường như là Mục tiêu-C các đối tượng như NSString không thể được phân bổ tĩnh (xem ví dụ: Are objects in Objective-C ever created on the stack?). Nếu

typedef NSString VMVideoCategoryType; 

được nhập khẩu vào Swift thì bạn có thể khai báo một biến địa phương

var foo : VMVideoCategoryType 

đó sẽ là một NSStringkhông một con trỏ đến NSString.

Cũng lưu ý rằng những gì bạn thấy trong Swift là NSString tương ứng với NSString * trong Mục tiêu-C.

Nếu bạn xác định VMVideoCategoryType như một typedef cho NSString * sau đó nó nhìn thấy trong Swift:

typedef NSString * VMVideoCategoryType; 

extern VMVideoCategoryType const VMVideoCategoryType_MusicVideo; 
// ... 
+0

này hoạt động cho được thoát khỏi lỗi Swift nhưng sau đó khai báo kiểu trước đây của tôi trong obj-C sử dụng kiểu đó ném lỗi: 'Chuyển đổi ngầm định của con trỏ gián tiếp sang con trỏ Mục tiêu-C thành 'NSString *' không được phép với ARC2 – Ramsel

+0

@Ramsel: Bạn phải thay thế 'VMVideoCategoryType *' bằng 'VMVideoCategoryType' sau thay đổi đó (như tôi đã làm trong các định nghĩa bên ngoài). –

+0

@Ramsel: Nếu điều đó không có tác dụng, vui lòng thêm mã Objective-C gây ra sự cố cho câu hỏi của bạn. –

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