/ / Integrazione dell'applicazione Swift to Objective-C: ios, objective-c, swift

Integrazione dell'applicazione Swift to Objective-C: ios, objective-c, swift

Ho un'applicazione Objective-C in cui mi piace integrare Swift, ma ho un problema strano.

Ho importato <#ProjectName#>-Swift.h al mio file di implementazione, dove avevo bisogno della classe Swift. La mia classe Swift ha questo aspetto:

import Foundation

@objc class FileIconColor: NSObject {

@objc func fileIconColorForSuffix(suffix: NSString) -> UIColor {
var color:UIColor!
//Some huge calculations
return color
}

//Just for testing
@objc func test () {
println("Test")
}

}

Sono in grado di chiamare la classe, ma non sono in grado di accedere alle funzioni della classe; Come puoi vedere, il @objc i prefissi ci sono, sia sulla Classe che sulle sue funzioni.

Sai perché succede? Costruisco il progetto anche prima di voler utilizzare la funzione, perché l'intestazione del bridging Swift deve prima essere costruita, sono corretto?

Oh, btw, sono riuscito ad accedere al codice Objective-C nella mia classe Swift. Quindi non ci può essere molto sbagliato (ho creato manualmente l'intestazione di bridging Objective-C) :)

Grazie, David

risposte:

2 per risposta № 1

Ho appena provato a vedere che funziona per me in un vecchio progetto Objective C. Sono su Xcode 6.0.1.

L'ho fatto:

  1. Ho aggiornato il mio vecchio progetto a Xcode 6 e impostato Deployment Target su 7.1
  2. Ha creato un nuovo file Swift e ha detto sì alla configurazione di un'intestazione di bridging Objective-C.
  3. Inserito il tuo codice in esso. (Ho anche dovuto importare UIKit per UIColor da compilare.)
  4. Nel mio controller View principale, ho messo questo:

In cima:

#import "PhotoUnzipper-Swift.h"

(PhotoUnzipper è il nome del mio progetto)

e in viewDidLoad:

FileIconColor *color = [[FileIconColor alloc]  init];
[color test];

Ha compilato e ho ottenuto la stampa "Test" nella console.

Importante: L'ho fatto non importa il <#ProjectName#>-Swift.h file. Xcode si prende cura di questo.

La prima volta che ho provato, ho avuto problemi perchéaveva un obiettivo di spiegamento di 4.1. (sciocco me.) Non sembravo essere in grado di risolverlo, ma ho ricominciato e ho seguito esattamente i passaggi sopra e ha funzionato.