2015-06-16 36 views
15

Chúng tôi có thể, khá dễ dàng, sử dụng Objective-C with C++ in Qt.Sử dụng Swift với Qt

Sau khi xem nhiều cuộc đàm phán WWDC 2015 của Apple, tôi hy vọng Swift sẽ thay thế Objective-C để phát triển OS X (và iOS); tất cả các cuộc biểu tình sử dụng Swift.

Xét rằng bạn có thể dùng Objective-C và Swift cùng với tiêu đề bắc cầu, có thể biên dịch mã Swift trong dự án Qt và truy cập Swifts đối tượng lớp đầu tiên (Classes, Structs, Enums, v.v.) bằng C++ không?


Nếu có thể ...

Gọi một chức năng Objective-C từ Qt đòi hỏi gói mã trong một hàm C, với một tiêu đề C được gọi là từ Qt.

Gọi Swift từ Objective-C yêu cầu một tiêu đề bắc cầu để biểu thị các tệp Swift nào khả dụng. Tiêu đề này sau đó được tham chiếu trong một dự án XCode; chúng ta có thể làm điều này trong một Qt .pro và nếu như vậy, làm thế nào?

Giả sử chúng ta có thể xác định tiêu đề bắc cầu, chúng ta vẫn chỉ có thể gọi Swift từ các tệp Objective-C, nhưng Swift có thể được gọi trực tiếp từ Qt, trong C++ không?

+0

Về mặt lý thuyết có thể có tiêu đề bắc cầu. Bạn đã thử gì rồi? – JAL

+0

@JAL, nhưng về mặt lý thuyết và thực tế có thể không? Theo như tôi có thể nói, Swift chỉ có một mối quan hệ trực tiếp với Objective-C, chứ không phải C++ – TheDarkKnight

+0

Vâng, bạn sẽ cần tạo một trình bao bọc C hoặc Objective-C cho mã Qt C++. Xem: http://stackoverflow.com/questions/24042774/can-i-mix-swift-with-c-like-the-objective-c-mm-files – JAL

Trả lời

1

Gọi hàm mục tiêu-C từ Qt yêu cầu gói mã trong hàm C, với tiêu đề C được gọi từ Qt.

Điều này không đúng, các hàm và phương thức Obj-C và Obj-C++ có thể được gọi trực tiếp từ Obj-C++. Cho rằng Obj-C++ là (chủ yếu) C++, giao tiếp giữa Qt và Obj-C/C++ là tầm thường. Bạn có thể chỉ cần đặt tên tệp triển khai Qt của mình .mm thay vì .cpp! Bạn có thể gọi Qt hoặc C++ chuẩn trực tiếp từ việc triển khai phương thức Obj-C, được biên dịch thành các tệp Obj-C++ (.mm, chứ không phải .m) và ngược lại.

Có một cách để thu gọn trình biên dịch nhanh chóng để tạo tiêu đề bắc cầu cho bạn và điều này có thể được tích hợp vào tệp .pro dưới dạng trình biên dịch tùy chỉnh hoặc mục tiêu tùy chỉnh.

+0

* "Các hàm và phương thức Obj-C và Obj-C++ có thể được gọi trực tiếp từ Obj-C++" * - Tất nhiên, đó là do thiết kế của Obj-C, hoặc ý bạn là * "trực tiếp từ C++" *? Bạn có thể chỉ cho tôi theo hướng của phương thức để có được trình biên dịch nhanh chóng để tạo tiêu đề chuyển tiếp cho Swift trong C++ không? Điều này sẽ khác với tiêu đề bắc cầu giữa Swift và Objective-C? – TheDarkKnight

+1

@TheDarkKnight Không, tiêu đề bắc cầu cho Obj-C++ chỉ đơn giản là một từ Obj-C, vì nó cũng là hợp lệ Obj-C++. Kể từ khi sử dụng C++ của Qt làm cho nó hợp lệ Obj-C++ là tốt, bạn chỉ có thể đổi tên tất cả các tập tin .cpp của bạn thành .mm và mọi thứ vẫn hoạt động. –

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