Kaip skambinti objekto C kodu iš „Swift“

Kaip „Apple“ naujajame „Swift“ kalba, kaip paskambinti „Objective-C“ kodu?

„Apple“ paminėjo, kad jie gali egzistuoti toje pačioje programoje, bet ar tai reiškia, kad galite techniškai pakartotinai naudoti senas klases, padarytas „Objective-C“ kuriant naujas klases „Swift“?

Priežastys

„Objective-C“ yra nepriklausoma platforma, o „Swift“ priklauso nuo platformos. Taigi, ne platformos specifinio kodo (verslo logikos bibliotekų) rašymas Swift'e nebūtų protingas. Tačiau rašymo kodas, kuris priklauso nuo jo platformos (pvz., Susijęs su sąsaja), būtų gerai. Ne sakydamas, kad tai būtų gera idėja, bet tai tikrai domina.

864
02 июня '14 в 23:05 2014-06-02 23:05 Davidas Mulderis yra nustatytas birželio 2 d. 14 val. 23:05 2014-06-02 23:05
@ 17 atsakymų

Naudojant „CIF“ klases „Swift“

** Jei turite esamą klasę, kurią norite naudoti, atlikite 2 veiksmą ir pereikite prie 5 veiksmo . (Kai kuriais atvejais turėjau pridėti aiškų #import <Foundation/Foundation.h į senesnę C-failą.) **

1 veiksmas: pridėkite „C-m“ tikslą

Pridėkite .m failą į savo klasę ir pavadinkite jį CustomObject.m .

2 veiksmas: pridėkite tilto antraštę

Pridėjus .m failą, greičiausiai gausite tokį kvietimą:

2019

1269
03 июня '14 в 3:12 2014-06-03 03:12 atsakymą įteikė „ Logan“ birželio 03 d. 14 d. 3:12 2014-06-03 03:12

Žr. „Apple“ vadovą „ Swift naudojimas su kakava ir objektyvu-C“ . Šioje instrukcijoje aprašoma, kaip „Swift“ naudoti „Objective-C“ ir „C“ kodą, ir rekomendacijas, kaip pakeisti projektą arba sumaišyti jį ir suderinti objekto C / C ir „Swift“ duomenis esamame projekte.

Kompiliatorius automatiškai generuoja „Swift“ sintaksę skambinant C funkcijoms ir „C-objekto“ metodams. Kaip rodo dokumentai, šis C tikslas:

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

įsijungia į šį greitąjį kodą:

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

„Xcode“ taip pat atlieka šį vertimą „į skrydį“ - galite redaguoti „Swift“ failą „Open Quick“ ir įvesti „Objective-C“ klasės pavadinimą, ir jis nuves jus į „Swift“ klasės antraštės versiją. (Taip pat galite gauti spustelėję „cmd“ API simbolyje „Swift“ faile.) Ir visa API nuorodos dokumentacija „ iOS 8“ ir „ OS X v10.10“ („Yosemite“) kūrėjų bibliotekose matoma tiek „Objective-C“ formose, tiek „Swift“ (pvz. UIView ).

109
02 июня '14 в 23:43 2014-06-02 23:43 atsakymas pateikiamas rickster 02 birželio 14 d. 23:43 2014-06-02 23:43

Toliau pateikiami žingsniai po žingsnio nurodymai, kaip naudoti „Objective-C“ kodą (šiuo atveju trečiosios šalies pateiktą sistemą) „Swift“ projekte:

Paprastais veiksmais:

  • Bus rodoma eilutė, tada spustelėkite Gerai ... Jei nebus rodoma, mes ją sukursime rankiniu būdu, kaip ir toliau ... Sukurkite vieną antraštės failą iš iOS šaltinio ir nurodykite pavadinimą ProjectName-Bridging-Header (pavyzdys: Test-Bridging-Header) tada pereikite prie konfigūracijos kūrimo „Swift“ → „Objective-C“ kompiliatoriaus kode. tiltas pridėti „Objective-C“ tilto pavadinimą .. (Test / Test-Bridging-Header.h). Taip, tai baigta.

  • Pasirinktinai, ištrinkite pridėtą C-failą (pavadinimu „nieko“ GIF paveikslėlyje aukščiau). Jums to nereikia.

  • Atidarykite tilto antraštės failą . Failo pavadinimas yra [YourProject] -Bridging-Header.h . Jame yra komentaras, kurį pateikia „Xcode“. Pridėkite „Objective-C“ failo kodo eilutę, į kurią norite įtraukti , pavyzdžiui, trečiosios šalies struktūrą. Pvz., Jei norite į savo projektą įtraukti „Mixpanel“, prie tilto antraštės failo turėsite pridėti šią eilutę:

      #import "Mixpanel.h" 
  • Dabar bet kuriame „Swift“ faile galite naudoti esamą „ Object -C“ kodą „Swift“ sintaksėje (šio pavyzdžio atveju, ir galite skambinti „Mixpanel SDK“ metodais ir tt), jums reikia susipažinti su tuo, kaip „Xcode“ konvertuoja „Objective-C“ į „Swift“ . „Apple“ vadovas yra greitas skaitymas. Arba žr. Šį atsakymą, kad būtų pateikta ne visa santrauka.

„Mixpanel“ pavyzdys:

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

Kas tai yra!

Pastaba Jei pašalinsite tilto antraštės failą iš savo projekto , būtinai eikite į „Build Settings“ ir ištrinkite „ Objective-C“ tilto antraštės vertę „Quick compiler - code generation“.

54
12 февр. Atsakymas duotas derrrick 12 Feb. 2015-02-12 22:34 '15, 10:34 pm 2015-02-12 22:34

Galite perskaityti gerą „ Swift“ ir „Cocoapods“ įrašą . Iš esmės turime sukurti tilto antraštės failą ir įdėti visas Objective-C antraštes. Ir tada turime kreiptis į jį iš mūsų statybų nustatymų. Po to galime naudoti C-objekto kodą.

 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) }) 

Taip pat žr. „Apple“ dokumentą „Swift“ naudojant „Cocoa“ ir „Objective C“ .

34
04 июня '14 в 5:11 2014-06-04 05:11 Atsakymą pateikė Jake Lin birželio 4 d. 14 d. 5:11 2014-06-04 05:11

Parašiau paprastą Xcode 6 projektą, kuriame parodoma, kaip sumaišyti C ++, Objective-C ir Swift kodus:

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

Pavyzdžiui, pavyzdys vadina „Swift“ funkciją „Objective-C“ ir „C ++“ .

Svarbiausia yra sukurti bendrą „Project-Bridging-Header.h“ antraštę ir įdėti „Objective-C“ antraštes.

Prašome atsisiųsti projektą kaip išsamų pavyzdį.

22
13 июня '14 в 13:10 2014-06-13 13:10 atsakymą pateikė Gian Luigi Romita birželio 14 d. 13:10 2014-06-13 13:10

Citata iš dokumentacijos :

Bet kuris objekto C pagrindas (arba C biblioteka), prieinamas kaip modulis, gali būti importuojamas tiesiogiai į „Swift“. Tai apima visas „Objective-C“ sistemos sistemas, pvz., Fondą, „UIKit“ ir „SpriteKit“, taip pat bendras sistemas aprūpintas „C“ bibliotekas. Pvz., Norėdami importuoti fondą, tiesiog pridėkite šią importo deklaraciją „Swift“ failo viršuje, kuriame dirbate:

import Foundation

Šis importavimas leidžia visus pagrindinius API, įskaitant NSDate, NSURL, NSMutableData, ir visus jų metodus, savybes ir kategorijas, tiesiogiai pasiekiamus „Swift“.

19
02 июня '14 в 23:43 2014-06-02 23:43 atsakymą pateikė Gergo Erdosi 02 birželio 14 d. 11:43 2014-06-02 23:43

Dar vienas dalykas, kurį norėčiau pridėti čia:

Esu labai dėkingas už atsakymą @Logan. Tai tikrai padeda sukurti tilto failą ir nustatymus.

Bet baigus visus šiuos žingsnius, aš vis dar negaunu „Swift“ objekto C klasės.

Aš naudoju cocoapods biblioteką ir ją integravau į savo projektą. Kas yra pod "pop" .

Todėl, jei naudojate „Objective-C“ objektus „Swift“, tuomet gali būti, kad negalite gauti arba import klasių „Swift“.

Paprastas dalykas, kurį turėtumėte padaryti, yra:

  1. Eikite į <YOUR-PROJECT>-Bridging-Header failą ir
  2. Pakeiskite #import <ObjC_Framework> operatorių @import ObjC_Framework

Pavyzdžiui: (pop biblioteka)

pakeisti

 #import <pop/POP.h> 

su

 @import pop; 

Naudokite „ c> kai #import neveikia.

18
16 сент. atsakymas duotas Kampai rugsėjo 16 d 2015-09-16 10:00 '15 10:00 val. 2015-09-16 10:00

Tiesiog atkreipkite dėmesį į tuos, kurie bando pridėti „Objective-C“ biblioteką „Swift“: statybiniuose nustatymuose turite pridėti -ObjC → Įrišimas → Kitos nuorodos vėliavos.

10
20 марта '16 в 20:53 2016-03-20 20:53 atsakymas duotas david72 kovo 20 '16 20:53 2016-03-20 20:53

Sukūrę „Bridging“ antraštę, eikite į Build Setting => Ieškoti „Objective-C Bridging Header“.

Žemiau rasite failą "" generuojamos Objekto-C sąsajos antraštės pavadinimą. "

Importuokite šį failą į peržiūros valdiklį.

Pavyzdys: mano atveju: „Dauble-Swift.h“

2019

25 нояб. Atsakymas pateikiamas „ Avijit Nagare“ lapkričio 25 d. 2015-11-25 11:29 '15, 11:29, 2015-11-25 11:29

Spustelėkite meniu "Naujas failas" ir pasirinkite tikslinės rinkmenos kalbą. Šiuo metu ji automatiškai generuoja „C-užduoties“ uždarymo antraštės failą, kuris naudojamas nustatyti tam tikrą klasės pavadinimą.

„Objekto C tilto antraštė“ skyriuje „Greitas kompiliatorius - kodų generavimas“.

4
10 сент. Atsakymas suteikiamas „ Yogesh shelke“ 10 sep . 2015-09-10 15:16 '15 15:16 2015-09-10 15:16
  • Sukurkite .h failą iš failo NewFile → Source → header
  • Tada išsaugokite failo pavadinimą Your_Target_Name-Bridging-Header.h. Žmonės čia dažnai klysta, kai priima savo projekto pavadinimą, tačiau tai turėtų būti projekto pavadinimas, jei abiem atvejais jie yra skirtingi, paprastai jie yra tie patys.
  • Tuomet statymo nustatymuose raskite „Tikslo-C“ viršutinės antraštės antraštės vėliavą ir įdėkite savo naujai sukurto tilto failo adresą, galite dešiniuoju pelės klavišu spustelėti failą → rodyti ieškiklį → vilkite failą į teksto sritį, tada adresas bus užpildytas.
  • Naudojant #import Your_Objective-C_file.h
  • Greitame faile galite pasiekti „ObjC“ failą, bet tik greitai.
3
29 июня '17 в 9:38 2017-06-29 09:38 atsakymas pateikiamas „ Nish“ birželio 29 d. 17 d. 9:38 2017-06-29 09:38

Bet kuris objekto C pagrindas (arba C biblioteka), prieinamas kaip modulis, gali būti importuojamas tiesiogiai į „Swift“. Tai apima visas „Objective-C“ sistemos sistemas, pvz., Fondą, „UIKit“ ir „SpriteKit“, taip pat bendras sistemas aprūpintas „C“ bibliotekas. Pvz., Norėdami importuoti fondą, tiesiog pridėkite šį importo pareiškimą į „Swift“ failo, kuriame dirbate, pradžią:

 import Foundation 

Šis importas apima visas pagrindines API, įskaitant NSDate, NSURL, NSMutableData ir visus jų metodus, savybes ir kategorijas, kurias galima tiesiogiai pasiekti „Swift“.

Tai paėmė iš „Apple“ dokumentacijos.

2
28 сент. atsakymas, kurį pateikė user4601102 Sep 28 2016-09-28 10:12 '16 at 10:12 am 2016-09-28 10:12

„Swift 4.2.1“ projekte „Xcode 10.1“ galite lengvai pridėti „Objective-C“ failą. Atlikite šiuos veiksmus, kad sutelktumėte „Objective-C“ failą „Swift“ projekte.

Step_01: sukurkite naują Xcode projektą naudodami Swift kalbą:

File > New > Project > objc .

Step_02: „Swift“ projekte pridėkite naują „Objective-C“ failą:

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

Step_03: jei pirmą kartą į Swift projektą įtraukiate naują Objective-C failą, „Xcode“ paprašys:

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

2019

13 июня '18 в 0:43 2018-06-13 00:43 atsakymas pateikiamas ARGeo birželio 13 d. 18 val. 0:43 2018-06-13 00:43

Šiame dokumente „Apple“ pateikė oficialų vadovą: kaip skambinti „c-code-from-swift“

Čia yra atitinkama dalis:

Jei norite importuoti „Objective-C“ rinkmenų rinkinį į „Swift“ kodą pagal tą patį taikymo tikslą, pasikliaukite „Objective-C“ tilto antraštės failu, kad atidarytumėte šiuos failus „Swift“ . „Xcode“ siūlo sukurti šią antraštę, kai prie esamos „Swift“ programos pridedate „Swift“ failą į esamą „Objective-C“ programą arba „Objective-C“ failą.

Jei sutinkate, Xcode kartu su jūsų sukurtu failu sukuria tilto antraštės failą ir suteikia jam pavadinimą, naudodamas jūsų produkto modulio pavadinimą, o po to - „-Bridging-Header.h“. Taip pat galite patys sukurti tilto antraštę, pasirinkdami Failas> Naujas> Failas> [operacinė sistema]> Šaltinis> Antraštės failas.

Redaguokite jungties antraštę, kad įvestumėte savo „Objective-C“ kodą į „Swift“ kodą:

  1. Tikslo-C tilto antraštėje importuokite kiekvieną „Object-C“ antraštę, kurią norite rodyti „Swift“.
  2. „Swift Compiler - Generation“ kodo kūrimo nustatymuose įsitikinkite, kad „Objective-C“ kūrimo parametras „Bridging Header“ turi kelią į tilto antraštės failą. Kelias turi būti lyginamas su jūsų projektu, taip pat kaip ir jūsų „Info.plist“ kelias, kuris nurodytas kūrimo nustatymuose. Dažniausiai šio parametro keisti nereikia.

Visos viešosios „Objective-C“ antraštės, nurodytos tilto antraštėje, yra matomos „Swift“.

0
05 янв. atsakymą pateikė Tibinas Tomas 2019-01-05 14:17 '19, 14:17 pm 2019-01-05 14:17

Dvišalis požiūris į objektyvų objektą-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 

Gerai eiti dabar .

0
13 апр. Sanjay Mali atsakymas, pateiktas balandžio 13 d 2018-04-13 12:39 '18, 12:39 2018-04-13 12:39

Pirmasis žingsnis: -

Jei pridėsite objektyvų failą c, kur jūsų projektas buvo sukurtas greito perkėlimo kalba, galite gauti toliau pateiktą parinktį

2019