{"id":255344,"date":"2022-06-10T08:33:36","date_gmt":"2022-06-10T07:33:36","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=appcode&#038;p=255344"},"modified":"2022-08-09T16:42:50","modified_gmt":"2022-08-09T15:42:50","slug":"appcode-2022-2-eap3-concurrency-interoperability-with-objective-c-and-support-for-existential-any","status":"publish","type":"appcode","link":"https:\/\/blog.jetbrains.com\/zh-hans\/appcode\/2022\/06\/appcode-2022-2-eap3-concurrency-interoperability-with-objective-c-and-support-for-existential-any","title":{"rendered":"AppCode 2022.2 EAP3: Concurrency Interoperability with Objective-C and Support for Existential Any"},"content":{"rendered":"<p>Hi,<\/p>\n<p>A new AppCode 2022.2 EAP build (222.2964.42) is available for download. Builds are available from our <a href=\"https:\/\/www.jetbrains.com\/objc\/nextversion\" target=\"_blank\" rel=\"noopener\">website<\/a> and via the <a href=\"https:\/\/www.jetbrains.com\/toolbox-app\/\" target=\"_blank\" rel=\"noopener\">Toolbox App<\/a>. You can also update via patch if you\u2019re using the 2022.2 EAP2 build.<\/p>\n<p>Give the free EAP builds a try and let us know what you think about the changes! Share your feedback in the comments or submit it to our <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/OC\" target=\"_blank\" rel=\"noopener\">issue tracker<\/a>.<\/p>\n<p align=\"center\"><a class=\"jb-download-button\" href=\"https:\/\/www.jetbrains.com\/appcode\/nextversion\" target=\"_blank\" rel=\"noopener\"><i class=\"download-icon\"><\/i>DOWNLOAD APPCODE 2022.2 EAP<\/a><\/p>\n<h2 id=\"concurrency_interoperability_with_objective_c\">Concurrency interoperability with Objective-C<\/h2>\n<p>The Swift language comes with a set of concurrency features that includes asynchronous functions and actors. The Objective-C language doesn\u2019t have them, so asynchronous APIs are expressed manually through the use of completion handlers. Because the tight integration between Swift and Objective-C APIs is an important part of the developer experience on Apple platforms, Swift 5.5 added <a href=\"https:\/\/github.com\/apple\/swift-evolution\/blob\/main\/proposals\/0297-concurrency-objc.md\" target=\"_blank\" rel=\"noopener\">Concurrency interoperability with Objective-C<\/a>.<\/p>\n<p>AppCode 2022.2 now supports it as well, which includes the following:<\/p>\n<ul>\n<li>Correct code resolve in Swift for Objective-C asynchronous functions.<\/li>\n<li>Support for actor interoperability with Objective-C.<\/li>\n<li>Various <a href=\"https:\/\/github.com\/apple\/swift-evolution\/blob\/main\/proposals\/0297-concurrency-objc.md#additional-objective-c-attributes\" target=\"_blank\" rel=\"noopener\">Objective-C attributes<\/a> like <code>_Nullable_result<\/code> , <code>__attribute__((swift_async_error(...)))<\/code> are handled correctly.<\/li>\n<\/ul>\n<p><img decoding=\"async\" alt=\"Swift Objective-C concurrency\" width=\"554\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/06\/objc_code_concurrency.png\"><\/p>\n<p><img decoding=\"async\" alt=\"Swift concurrency\" width=\"554\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/06\/swift_code_concurrency.png\"><\/p>\n<h2 id=\"existential_any\">Existential any<\/h2>\n<p>Another new Swift feature now supported in AppCode is the <a href=\"https:\/\/github.com\/apple\/swift-evolution\/blob\/main\/proposals\/0335-existential-any.md\" target=\"_blank\" rel=\"noopener\">existential <code>any<\/code><\/a>. The scope of IDE support includes:<\/p>\n<ul>\n<li>Correct code parsing and type checking.<\/li>\n<li>Code completion and code generation.<\/li>\n<li>Changes to the code formatter.<\/li>\n<\/ul>\n<p><img decoding=\"async\" alt=\"Completion with Any\" width=\"554\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/06\/any_support.png\"><br \/>\nThe completion for <code>any<\/code> is planned for the future versions (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/OC-22899\" target=\"_blank\" rel=\"noopener\">OC-22899<\/a>).<\/p>\n<p>Among other fixes for Swift language support, it\u2019s worth mentioning a few pertaining to multiple trailing closure syntax (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/OC-20682\" target=\"_blank\" rel=\"noopener\">OC-20682<\/a>, <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/OC-22592\" target=\"_blank\" rel=\"noopener\">OC-22592<\/a>). In addition, there are a couple of fixes for module maps in AppCode (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/OC-22526\" target=\"_blank\" rel=\"noopener\">OC-22526<\/a>, <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/OC-19757\" target=\"_blank\" rel=\"noopener\">OC-19757<\/a>).<\/p>\n<p>The full release notes are available <a href=\"https:\/\/youtrack.jetbrains.com\/articles\/OC-A-223445201\/AppCode-20222-EAP-3-222296442-build-Release-Notes\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n<p>Your AppCode team<br \/>\nJetBrains<br \/>\n<em>The Drive to Develop<\/em><\/p>\n","protected":false},"author":266,"featured_media":247384,"comment_status":"closed","ping_status":"closed","template":"","categories":[826,89],"tags":[6978,6939,600,91,445],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/appcode\/255344"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/appcode"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/types\/appcode"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/users\/266"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/comments?post=255344"}],"version-history":[{"count":9,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/appcode\/255344\/revisions"}],"predecessor-version":[{"id":255512,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/appcode\/255344\/revisions\/255512"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/media\/247384"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/media?parent=255344"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/categories?post=255344"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/tags?post=255344"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/cross-post-tag?post=255344"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}