2014-06-27 23 views
19

Có tương đương Swift với đối tượng @encode của Objective-C không?Tương đương Swift của @encode

Ví dụ

@encode(void *) // -> @"^v" 

tìm kiếm kết quả gì.

+1

cho rằng chúng tôi [thậm chí không thể sử dụng nội tâm để xác định loại đối tượng] (http://stackoverflow.com/questions/24101450/how-do-you-find-out-the-type-of- một đối tượng-trong-swift), tôi nghi ngờ có một tương đương nhanh chóng - diễn viên mặc dù, bởi vì nếu bạn tìm thấy một giải pháp, mà sẽ cung cấp ít nhất một điểm khởi đầu trên câu hỏi nội tâm của tôi;) – Jiaaro

+1

Tại sao bạn cần điều này? Bạn có thể giải thích ngữ cảnh không? Có thể có một thay thế Swift tốt cho những gì bạn đang cố gắng làm. –

+0

@ St3fan Tôi nghĩ đó là một câu hỏi hay, nhưng đối với ngữ cảnh, cf. khối mã đầu tiên trong [câu trả lời SO này] (http://stackoverflow.com/a/24456115/45813) –

Trả lời

4

Không, không có - bởi vì dưới lớp mui xe Các lớp học Swift không sử dụng tính hướng nội Object-C để thực hiện công việc của chúng. Không cần phải tính toán điều này (như trong Objective-C) để truyền/gọi dữ liệu. Tuy nhiên, nếu bạn cần sử dụng nó một cách linh động khi chạy (ví dụ, để kết hợp với các phương thức Objective-C hiện có) thì bạn có thể tạo một cuộc gọi Objective-C và truyền đối tượng thông qua hoặc (đối với các kiểu đơn giản). bảng tra cứu.

Loại mã hóa được liệt kê tại https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html có bản đồ và có thể viết câu lệnh loại chuyển đổi thực hiện tra cứu.

Nhưng về cơ bản nếu bạn có một kiểu mà bạn muốn vượt qua và tìm thấy trong đó là mục tiêu loại c mã hóa, bạn có thể sử dụng phương pháp objCType của NSObject:

var i = 1 as NSNumber 
String.fromCString(i.objCType)! == "q" 

Nếu bạn cần phải vượt qua nó thông qua như một unmolested C chuỗi anyway, thậm chí bạn có thể không cần phải chuyển đổi nó trở lại một loại chuỗi Swift.

+3

'objCType' là phương thức' NSValue', không phải 'NSObject'. –

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