Impossibile utilizzare le classi Swift in Objective-C


260

Cerco di integrare il Swiftcodice nella mia app. La mia app è scritta Objective-Ce ho aggiunto una Swiftclasse. Ho fatto tutto qui descritto . Ma il mio problema è che Xcodenon ho creato il -Swift.hfile, solo le intestazioni ponte. Quindi l'ho creato, ma in realtà è vuoto. Posso usare tutte le mie classi ObjC in Swift, ma non posso farlo viceversa. Ho segnato la mia lezione veloce con @objcma non mi ha aiutato. Cosa posso fare ora?

EDIT: Apple dice: "Quando importi il ​​codice Swift in Objective-C, fai affidamento su un Xcode-generatedfile di intestazione per esporre quei file su Objective-C. [...] Il nome di questa intestazione è il nome del modulo del tuo prodotto seguito dall'aggiunta di" -Swift.h ”."

Ora, quando voglio importare quel file, viene visualizzato un errore:

    //MainMenu.m

    #import "myProjectModule-Swift.h" //Error: 'myProjectModule-Swift.h' file not found

    @implementation MainMenu

Ecco il mio file FBManager.swift:

@objc class FBManager: NSObject {

    var descr = "FBManager class"

    init() {
        super.init()
    }

    func desc(){
        println(descr)
    }

    func getSharedGameState() -> GameState{
        return GameState.sharedGameState() //OK! GameState is written in Objective-C and no error here
    }
}

27
YourProjectName-Swift.hdovrebbe essere un file di intestazione magico che Xcode crea automaticamente per te durante la compilazione (non lo vedrai effettivamente nel browser del progetto). Prova a eliminare quello che hai creato e aggiungi #import YourProjectName-Swift.hai file in cui desideri utilizzare le classi Swift.
Greg,

3
La tua app che stai costruendo si chiama myProjectModule? Il -Swift.hfile dovrebbe iniziare con il nome dell'app. Hai un file che termina con -Bridging-Header.h? Dovresti. In tal caso, la prima parte di quel file è il nome del tuo progetto. Combina la prima parte di quel nome file con -Swift.hquello che dovresti includere.
vacawama,

4
Ho funzionato con successo nel mio progetto, eppure -Swift.hsul mio Mac non si trovano file che finiscono , eppure posso includerlo. Quindi non rimanere impegnato a cercare un file del genere. Assicurati solo di nominarlo correttamente.
vacawama,

2
@vacawama Nota che puoi vedere i contenuti dopo aver aggiunto l'istruzione import in un file Objective-C facendo clic tenendo premuto Comando sull'importazione come se stessi visitando qualsiasi altro file header.
Kendall Helmstetter Gelner,

4
Ho dovuto usare#import <MyProjectName/MyProjectName-Swift.h>
Oliver Pearmain il

Risposte:


516

Ho trascorso circa 4 ore cercando di abilitare Swiftnel mio Xcodeprogetto basato su Objective-C. Il mio myproject-Swift.hfile è stato creato correttamente, ma il mio Xcodenon ha visto il mio Swift-classes. Così, ho deciso di creare un nuovo Xcodeprogetto basato su Objc e finalmente ho trovato la risposta giusta! Spero che questo post possa aiutare qualcuno :-)

Integrazione rapida per il progetto basato su Xcode Objc:

  1. Crea un nuovo *.swiftfile (in Xcode) o aggiungilo usando Finder.
  2. Crea un Objective-C bridging headerquando Xcode ti chiede questo.
  3. Implementa la tua classe Swift:

    import Foundation
    
    // use @objc or @objcMembers annotation if necessary
    class Foo {
        //..
    }
  4. Apri le Impostazioni di costruzione e controlla questi parametri:

    • Definisce il modulo: YES

      Copia e incolla il nome del parametro in una barra di ricerca

    • Nome modulo prodotto: myproject

      Assicurarsi che il nome del modulo del prodotto non contenga caratteri speciali

    • Installa intestazione compatibilità Objective-C: YES

      Dopo aver aggiunto il *.swiftfile al progetto, questa proprietà apparirà in Impostazioni build

    • Intestazione interfaccia generata Objective-C: myproject-Swift.h

      Questa intestazione è generata automaticamente da Xcode

    • Intestazione bridge Objective-C: $(SRCROOT)/myproject-Bridging-Header.h
  5. Importa l'intestazione dell'interfaccia Swift nel tuo file * .m.

    #import "myproject-Swift.h"

    Non prestare attenzione a errori e avvisi.

  6. Pulisci e ricostruisci il tuo progetto Xcode.
  7. Profitto!

2
Qualcuno ha visto la menzione della configurazione richiesta (almeno per me) nella documentazione all'indirizzo: developer.apple.com/library/prerelease/ios/documentation/Swift/… nel passaggio 4 sopra? Se lo è, l'ho perso. Grazie @sig.
Morkrom,

2
Il mio problema era molto più semplice: non riuscivo a trovare il file, "myproject-Swift.h"quindi mi sembra che non funzioni. Apparentemente, questo file non è visibile nel navigatore del progetto.
Asaf,

6
@Asaf In realtà sì, questo file viene generato automaticamente da Xcode e localizzato nel percorso di creazione del progetto. Quindi, puoi trovare questo file manualmente nel Finder / Console o aprirlo direttamente in Xcode usando Cmd + LeftClick su #import "myproject-Swift.h".
sig

1
Quanto a me # 5 è stato sufficiente per risolvere il problema !!
skywinder,

12
Con quelle 4 ore, hai risparmiato centinaia di ore, grazie mille :) Salvato nel mio preferito;)
Abo3atef
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.