Swift-dən Objective-C kodunu necə çağırırıq?

Apple-ın yeni Swift dilində, Objective-C kodunu necə adlandırırsınız?

Apple, eyni tətbiqdə bir yerdə yaşaya biləcəyini ifadə etdi, ancaq bu, Swift'taki yeni dərslər yaratarkən Objective-C'de edilən köhnə dərsləri texniki olaraq yenidən istifadə edə biləcəyini mi ifadə edir?

Reasoning

Objective-C, platforma müstəqil dildir, Swift platforma asılıdır. Beləliklə, Swift-də platforma aid olmayan kod yazmaq (biznes məntiqi kitabxanaları) həssas olmazdı. Bununla yanaşı, platformada asılı olan yazı kodu (məsələn, interfeyslə əlaqəli) yaxşı olardı. Bunun yaxşı bir fikir olacağını söyləmək olmaz, amma bu, mütləq bir maraq.

864
02 июня '14 в 23:05 2014-06-02 23:05 David Mulder , 02 İyun '14 'də saat 23:05' da başlayacaq 2014-06-02 23:05
@ 17 cavab

Swift'ta Objective C Classes istifadə

** Əgər istifadə etmək istədiyiniz mövcud bir sinif varsa, 2 addım həyata keçirin və sonra 5 addıma keçin. (Bəzi hallarda daha #import <Foundation/Foundation.h köhnə bir Objective-C faylına əlavə etmək məcburiyyətində oldum). **

Addım 1: Objective-C-m tətbiqi əlavə edin

CustomObject.m faylını sinifə əlavə edin və CustomObject.m .

Addım 2: Körpü başlığı əlavə edin

Bir .m faylını əlavə etdikdə, çox güman ki bu kimi görünən bir dəvət alacaqsınız:

2019

1269
03 июня '14 в 3:12 2014-06-03 03:12 Cavab Logan tərəfindən 03.06.2014 tarixində 3:12 2014-06-03 03:12 tərəfindən verilir

Swift'ı Kakao və Objective-C ilə istifadə etmək üçün Apple-ə baxın. Bu təlimat, Swift-dən Objective-C və C kodunun necə istifadə edildiyini və bir layihənin necə tərtib edilməsi və ya onu qarışdırmaq və mövcud bir layihədə Objective-C / C və Swift detallarına uyğunlaşdırılması ilə bağlı təkliflərdən ibarətdir.

Derleyici avtomatik olaraq C funksiyaları və Objective-C üsullarını çağırmaq üçün Swift sözdizimini yaradır. Sənədlərin göstərildiyi kimi, bu Məqsəd-C:

 UITableView *myTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; 

bu sürət koduna çevrilir:

 let myTableView: UITableView = UITableView(frame: CGRectZero, style: .Grouped) 

Xcode həmçinin bu tərcüməi "sürətlə" yerinə yetirir - "Swift" faylını redaktə edərkən "Open Quick" istifadə edə və Objective-C sinifinin adını daxil edin və Swift sinif başlığının versiyasına aparacaq. (Siz də Swift faylında API simvolunda cmd düyməsini tıklayaraq əldə edə bilərsiniz.) Və iOS 8OS X v10.10 (Yosemite) proqramı üzrə bütün API arayış sənədləri Objective-C formaları və Swift (məsələn, UIView ).

109
02 июня '14 в 23:43 2014-06-02 23:43 cavab 02 iyun '14 'də saat 23:43' də verildi. 2014-06-02 23:43

Aşağıda, Swift layihəsində Objective-C kodunun (bu halda, üçüncü tərəf tərəfindən verilən çərçivənin) necə istifadə edilməsi ilə bağlı adım adım təlimat verilmişdir:

Sadə addımlar:

  • Bir sorğu görünəcək və sonra OK düyməsini basın ... Əgər görünmürsə, aşağıdakı şəkildə olduğu kimi əl ilə yaradacağıq ... iOS mənbəyindən bir başlıq faylı yaradın və ProjectName-Bridging-Header adını (məsələn: Test-Bridging-Header) sonra Swift → Objective-C derleyici kodunda konfiqurasiya qurmaq üçün gedin. körpü Objective-C köprü adı əlavə edin .. (Test / Test-Bridging-Header.h). Bəli, tamdır.

  • İsteğe bağlı olaraq, əlavə Objective-C faylını (yuxarıda göstərilən GIF şəklində "heç bir şey") silin. Buna artıq ehtiyacınız yoxdur.

  • Körpü başlıq faylını açın . Fayl adı [YourProject] -Bridging-Header.h . Xcode tərəfindən verilən bir şərh var. Əlavə etmək istədiyiniz bir Objective-C faylı üçün kod satırı əlavə edin , məsələn, üçüncü tərəf struktur. Məsələn, layihəyə Mixpanel əlavə etmək üçün körpü başlıq faylına aşağıdakı kod satırını əlavə etmək lazımdır:

      #import "Mixpanel.h" 
  • Hər hansı bir Swift faylında , Swift sözdizimində mövcud olan Objective-C kodunu istifadə edə bilərsiniz (bu nümunə vəziyyətində və Mixpanel SDK metodlarına zəng edə bilərsiniz), Xcode'un Objective-C-ni Swift . Apple Guide tez oxunur. Yoxsa bu cavabı tam olmayan bir xülasə görə görə bilərsiniz.

Mixpanel nümunəsi:

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { Mixpanel.sharedInstanceWithToken("your-token") return true } 

Bu nədir?

Qeyd Körpü başlığı faylını layihədən çıxararsanız , "Parametrlər qurun" ünvanına getdiyinizə və " Object-C" "Köçəri başlığı " üçün "Sadə kompilyator kodu yaratma" dəyərini silin.

54
12 февр. Cavab dərhal verildi 12 fevral. 2015-02-12 22:34 '15 at 10:34 pm 2015-02-12 22:34

Yaxşı Swift və Cocoapods postunu oxuya bilərsiniz. Əsasən köprü başlıq faylını yaratmalı və orada bütün Objective-C başlıqlarını yerləşdirməliyik. Və sonra quruluş parametrlərimizə istinad etməlisiz. Bundan sonra Objective-C kodunu istifadə edə bilərik.

 let manager = AFHTTPRequestOperationManager() manager.GET( "http://example.com/resources.json", parameters: nil, success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) in println("JSON: " + responseObject.description) }, failure: { (operation: AFHTTPRequestOperation!, error: NSError!) in println("Error: " + error.localizedDescription) }) 

Həm də Apple sənədini Kakao və Objective-C ilə Swift istifadə edin .

34
04 июня '14 в 5:11 2014-06-04 05:11 Cavab Jake Lin tərəfindən 04 İyun '14 'də saat 05:11 ' də 2014-06-04 05:11 'də verilir

C ++, Objective-C və Swift kodunu necə qarışdıracağını göstərən sadə Xcode 6 layihəsini yazdım:

https://github.com/romitagl/shared/tree/master/C-ObjC-Swift/Performance_Console

Xüsusilə, nümunə Swift-dən Objective-C və C ++ funksiyasını çağırır .

Əsas bir Layihə-Bridging-Header.h başlığı yaratmaq və Objective-C başlıqlarını yerləşdirməkdir.

Layihəni tam bir nümunə olaraq yükləyin.

22
13 июня '14 в 13:10 2014-06-13 13:10 Cavab Gian Luigi Romita tərəfindən 13 iyun 'da 13:10' də veriləcək 2014-06-13 13:10

Sənədlərdən sitat:

Modul kimi mövcud olan hər hansı bir Objective-C çərçivə (və ya C kitabxanası) birbaşa Swift-ə daxil edilə bilər. Bu, Fond, UIKit və SpriteKit kimi bütün Objective-C sistem çərçivələrini, həmçinin sistemlə təchiz olunmuş C kitabxanalarını ehtiva edir. Məsələn, bir Vakfı idxal etmək üçün sadəcə bu idxal bəyanatını işlədiyiniz Swift faylının üst hissəsinə əlavə edin:

import Foundation

Bu idxal, NSDate, NSURL, NSMutableData və bütün üsulları, xüsusiyyətləri və kateqoriyalarını birbaşa Swift-də təqdim edən bütün əsas API-lərdir.

19
02 июня '14 в 23:43 2014-06-02 23:43 cavab 02 iyun '14' də Gergo Erdosi tərəfindən 11:43 2014-06-02 23:43

Burada bir daha əlavə edəcəyəm:

Cavab üçün çox minnətdaram @Loqan. Bu həqiqətən körpü faylını və parametrlərini yaratmağa kömək edir.

Amma bütün bu addımları bitirdikdən sonra, Swift-da Objective-C sinifini ala bilmirəm.

Mən cocoapods kitabxanasından istifadə etdim və cocoapods inteqrasiya etdim. pod "pop" nədir.

Buna görə, Swift-də Objective-C obyektlərindən istifadə edərsəniz, Swift-də dərsləri ala və ya import edə bilməyiniz mümkündür.

Yapmanız gereken sadə şey:

  1. <YOUR-PROJECT>-Bridging-Header faylına və
  2. # #import <ObjC_Framework> operatorunu @import ObjC_Framework

Məsələn: (pop kitabxana)

əvəz etmək

 #import <pop/POP.h> 

ilə

 @import pop; 

# #import c> istifadə edin.

18
16 сент. Cavab verildi Kamp 16 Sentyabr 2015-09-16 10:00 '15 saat 10:00 'da

Yalnız Swift-də Objective-C kitabxanasına əlavə etmək istəyənlərə diqqət yetirin: qurma parametrləri -ObjC -i əlavə etməliyəm → Binding → Other linker flags.

10
20 марта '16 в 20:53 2016-03-20 20:53 Cavab verilir david72 Mart 20 '16 da 20:53 2016-03-20 20:53

Bridging başlığını yaratdıqdan sonra, Setting => "Objective-C Bridging Header" üçün axtarın.

Aşağıda "" yaradılmış Objective-C interfeysinin başlığının adı "" faylını tapa bilərsiniz. "

Bu faylı görünüş nəzarətçinizə idxal edin.

Məsələn: mənim vəziyyətimdə: "Dauble-Swift.h"

2019

25 нояб. Cavab verilir Avijit Nagare 25 noyabr. 2015-11-25 11:29 '15 'də 11:29' də, 2015-11-25 11:29

"Yeni Fayl" menyusuna basın və hədəf fayl dilini seçin. Bu anda, avtomatik olaraq bəzi sinif adını təyin etmək üçün istifadə olunan Objective-C Bridging Header faylını yaradır.

"Object-C Bridge başlığı" bölməsində "Tez kompilyator - kodun yaradılması".

4
10 сент. Cavab Yogesh şəlaləsi 10 sep verilir . 2015-09-10 15:16 '15 at 15:16 2015-09-10 15:16
  • NewFile → Source → header faylından .h fayl yaradın
  • Sonra faylınızın Your_Target_Name-Bridging-Header.h faylını saxlaya bilərsiniz. Buradakı insanlar adətən layihənin adını çəkdikdə səhv olurlar, lakin hər iki halda da, bir qayda olaraq, onlar eynidırsa, layihənin adı olmalıdır.
  • Sonra qurma parametrlərində Objective-C Bridging Header header bayrağını tapın və yeni yaratdığınız köprü faylının ünvanını yerləşdirin, faylda sağa vurun → finderdə göstərmək → faylını mətn sahəsinə sürükləyin, sonra ünvanı doldurulacaq.
  • #İmport Your_Objective-C_file.h istifadə edərək
  • Sürətli faylda ObjC faylına daxil ola bilərsiniz, ancaq yalnız sürətli dil.
3
29 июня '17 в 9:38 2017-06-29 09:38 cavab 29 iyun 'da 9:38' də veriləcək

Modul kimi mövcud olan hər hansı bir Objective-C çərçivə (və ya C kitabxanası) birbaşa Swift-ə daxil edilə bilər. Bu, Fond, UIKit və SpriteKit kimi bütün Objective-C sistem çərçivələrini, həmçinin sistemlə təchiz olunmuş C kitabxanalarını ehtiva edir. Məsələn, Vakfı idxal etmək üçün sadəcə bu idxal bəyanatını işlədiyiniz Swift faylının başlanğıcına əlavə edin:

 import Foundation 

Bu idxal, NSDate, NSURL, NSMutableData və bütün metodları, xüsusiyyətləri və Swift-də birbaşa əldə edilən kateqoriyalara daxil olmaqla, bütün əsas API-lər daxildir.

Bunu Apple sənədlərindən aldım.

2
28 сент. user4601102 tərəfindən verilmiş cavab 28 sentyabr 2016-09-28 10:12 '16 saat 10:12 'də 2016-09-28 10:12
19 мая '18 в 19:27 2018-05-19 19:27 Cavab CrazyPro007 tərəfindən verilir 19 May '18 saat 07:27 'da 2018-05-19 19:27

Xcode 10.1-də Swift 4.2.1 layihəsində asanlıqla Objective-C faylını əlavə edə bilərsiniz. Objective-C faylını Swift layihəsinə yönəltmək üçün aşağıdakı addımları yerinə yetirin.

Step_01: Swift dilini istifadə edərək, yeni bir Xcode layihəsi yaradın:

File > New > Project > objc .

Step_02: Swift layihəsində yeni Objective-C faylını əlavə edin:

File > New > File... > macOS > Objective-C File .

Step_03: Swift layihəsinə yeni bir Objective-C faylını ilk dəfə əlavə etsəniz, Xcode sizə soruşacaq:

Would you like to configure an Objective-C bridging header ?

2019

13 июня '18 в 0:43 2018-06-13 00:43 cavab ARGeo 13 iyun 18:43 ' da 0:43 2018-06-13 00:43 tarixində verilir

Bu sənəddə Apple rəsmi rəhbərliyi təqdim etdi: necə-to-call-c-code-from-swift

Burada müvafiq hissəsidir:

Eyni proqram məqsədi daxilində bir Objective-C faylları Swift koduna daxil etmək üçün, bu faylları Swift üçün açmaq üçün bir Objective-C köprü başlığı faylına əsaslanırsınız. Xcode mövcud Swift tətbiqinə mövcud bir Objective-C proqramına və ya Objective-C faylına bir Swift faylı eklediğinizdə bu başlığı yaratmaq təklif edir.

Əgər qəbul etsəniz, Xcode yaratdığınız faylla yanaşı bir körpü üstbilgi faylını yaradır və məhsulun modul adını istifadə edərək ad verir, "-Bridging-Header.h". Alternativ olaraq, Fayl> Yeni> Fayl> [əməliyyat sistemi]> Kaynak> Üstbilgi faylını seçərək özünüzü körpü başlığı yarada bilərsiniz.

Objective-C kodunuzu Swift kodunuza təqdim etmək üçün birləşdiricinin başlığını redaktə edin:

  1. Objective-C köprü başlığında, Swift-də göstərmək istədiyiniz hər bir Objective-C başlığını idxal edin.
  2. Swift Compiler-Generation kodunda qurma ayarlarında, Objektif-C qurmaq parametresinin Köprüleme Başlığı'nın köprü üstbilgi faylına olan yol olduğuna əmin olun. Yolu, Info.plist yolunuzun qurma ayarlarında göstərildiyi kimi, layihənizlə müqayisəli olmalıdır. Çox hallarda, bu parametr dəyişdirmək lazım deyil.

Köprü başlığında qeyd olunan bütün ictimai Objective-C başlıqları Swift-də görünə bilər.

0
05 янв. Cavab Tibin Thomas tərəfindən verilmişdir 05 yanvar 2019-01-05 14:17 '19 saat 02:17 'da 2019-01-05 14:17

Obyektiv obyektə ikitərəfli yanaşma - c

1

 1. Create bridge-header.h file in Xcode Project 2. import .h file in bridge-Header file 3. Set path of bridge-Header in Build settings. 3. Clean the Project 

2

  1. Create objective-c files in project(it automatically set path in Build Settings for you ) 2. import .h file in bridge-Header file 

İndi getmək yaxşıdır. Təşəkkür edirik.

0
13 апр. Sanjay Mali tərəfindən 13 apreldə cavab verdi 2018-04-13 12:39 '18 at 12:39 2018-04-13 12:39

İlk addım: -

Layihənin sürətli tərcümə dilində yaradıldığı bir obyektiv fayl c əlavə etsəniz, aşağıdakı kimi seçim əldə edirsiniz

2019

bağlı digər suallar və ya sual verin