Domanda

Supponiamo una configurazione come questa:

  • Hai un progetto Xcode 6, in cui hai implementato le tue classi (ad esempio MyView e MyViewController) sia con Objective-C che con Swift
  • Hai aggiunto un parco giochi al tuo progetto

Nel Playground è possibile importare moduli (framework) come UIKit con il import parola chiave.Come si abilita l'accesso alle altre classi del progetto dal Playground?

Il solo tentativo di accedere direttamente alle classi di progetto risulta con un messaggio di errore:Utilizzo dell'identificatore non risolto "MyView"

È stato utile?

Soluzione

A partire da xcode 6.0 beta 5, è ora possibile importare i propri quadri in un parco giochi. Ciò fornisce un modo per condividere il codice tra le tue applicazioni e i giochi di gioco, che possono importare i tuoi quadri. Per fare questo:

    .
  1. Il tuo parco giochi deve essere nello stesso spazio di lavoro del progetto che produce il tuo quadro. Il tuo spazio di lavoro deve contenere un bersaglio che produce il framework, invece di utilizzare un framework pre-costruito.

  2. Devi aver già creato il tuo quadro. Se è un framework iOS, deve essere costruito per una destinazione di esecuzione a 64 bit (ad esempio iPhone 5S) e deve essere costruito per il simulatore.

  3. È necessario disporre di uno schema attivo che costruisce almeno un bersaglio (quella posizione di costruzione del bersaglio verrà utilizzata nel percorso di ricerca quadro per il parco giochi).

  4. La tua preferenza "Build Location" (nelle impostazioni avanzate "Posizioni" di XCode) non deve essere impostata su "Legacy".

  5. Se il tuo framework non è un framework SWIFT, l'impostazione della costruzione "Definisce modulo" deve essere impostato su "Sì".

  6. È necessario aggiungere un'istruzione di importazione al parco giochi per il framework.

  7. Una volta che tutte queste condizioni sono soddisfatte, l'importazione del tuo quadro funzionerà in un parco giochi.

    In Xcode 7 abbiamo introdotto un altro meccanismo che è possibile utilizzare per importare le proprie classi come fonte, invece di importare un quadro; Puoi leggere su questo supporto "fonti ausiliari" a http://help.apple. com / xcode / mac / 8.0 / # / devfa5bea3af

Altri suggerimenti

In realtà sono riuscito a fare riferimento ad altri file Swift nel progetto corrente in questo modo:

  • Crea un parco giochi vuoto e posizionalo da qualche parte sotto il tuo progetto.
  • Apri il YourPlayground.playground bundle (sì, è un bundle = directory) nel Terminale.
  • Modificare contents.xcplayground ad esempio con vi e aggiungi un'altra sezione come questa:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<playground version='3.0' sdk='iphonesimulator'> 
   <sections>
       <code source-file-name='section-1.swift'/>
       <code source-file-name='section-2.swift'/>
   </sections>
   <timeline fileName='timeline.xctimeline'/>
</playground>
  • Rinominare section-1.swift A section-2.swift (se hai creato il Playground da zero, dovrebbe esserci un esempio section-1.swift nel tuo pacchetto)
  • Aggiungere un collegamento difficile (il collegamento simbolico non sembra funzionare) denominato section-1.swift che punterà all'esterno del pacchetto al file di classe Swift come:
ln ../../Classes/MyView.swift section-1.swift
  • Chiudi Xcode e apri nuovamente il parco giochi.
  • Ora dovrebbero esserci due sezioni, una con il contenuto del tuo file di classe Swift e l'altra con il contenuto di esempio che hai ottenuto creando Playground da zero.

In questo modo posso effettivamente eseguire codice che si trova al di fuori del Playground, ma Xcode sembra bloccarsi più spesso quando lo faccio in questo modo.

Modificare:

A partire da Xcode 6 beta 5 ora puoi fare riferimento ai file di progetto, come spiega Rick Ballard nel suo risposta.

Dal momento che Beta 5 di XCode 6 è possibile importare il tuo codice se è in un quadro.Ciò che devi fare è creare un bersaglio quadro, aggiungere i file swift lì e nel tuo parco giochi fare

import ModuleName
.

È possibile cercare il nome del modulo nelle impostazioni di build.Di solito è uguale al nome del target.

Ricordati di effettuare il codice che desideri vedere public.Avrai bisogno di costruire il progetto prima che i cambiamenti siano disponibili nel parco giochi.(Dovrai anche modificare il parco giochi per attivare la ri-esecuzione.)

IMPORTANTE

Non dare il file del parco giochi lo stesso nome del bersaglio!Se lo fai, l'importazione sembra funzionare ma riceverai il seguente errore quando il parco giochi tenta di eseguire:

.

Esecuzione del parco giochi non riuscita: Errore: non è stato possibile cercare i simboli:

Ho sprecato un'ora per capirlo.:)

Non ero in grado di farlo funzionare usando nessuna delle risposte qui, quindi ho iniziato a giocare e ho trovato un modo semplice che ha funzionato per me per importare una classe Swift in un parco giochi.

Basta creare un parco giochi nel tuo progetto, c'è una directory all'interno chiamata "fonti", trascina semplicemente una copia della classe Swift in quella cartella e il parco giochi allora avrà accesso ad esso.

Ad esempio:

EnterDescrizione dell'immagine qui

Ho appena messo i collegamenti a tutti i miei file Swift nella cartella Sources:

cd /path/to/project/MyPlayground.playground/Sources
ln -s ../../*.swift .
.

I cambiamenti nel tuo file sorgente entreranno in vigore nel tuo parco giochi immediatamente. ha funzionato molto bene .

Xcode 8.2, Swift 3.0.1, Macos Sierra

Tutto quello che devi fare - è scrivere all'inizio:

import ModuleName
.

(Supponendo il tuo parco giochi inserito nello stesso spazio di lavoro come framework / progetto)

Se non funziona:

    .
  1. Ricostruisci il tuo progetto

  2. Ricreare il parco giochi e copia tutto da vecchio parco giochi lì

  3. Risolve un sacco di strani errori con Init e importazioni falliti di qualsiasi cosa!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top