Hoe u eigen lessen uit uw eigen project kunt importeren in een Playground

Stel een opstelling als volgt uit:

  • Je hebt een Xcode 6-project, waarin je je eigen klassen hebt geïmplementeerd (bijvoorbeeld MyView en MyViewController) met zowel Objective-C als Swift
  • Je hebt een speeltuin aan je project toegevoegd

In de Playground is het mogelijk om modules (frameworks) zoals UIKitte importeren met het trefwoord import. Hoe activeer je de toegang tot de andere klassen van het project vanuit de Playground?

Als je alleen maar probeert om rechtstreeks toegang te krijgen tot projectklassen, krijg je een foutmelding:
Gebruik van onopgeloste ID ‘MyView’


Antwoord 1, autoriteit 100%

Vanaf Xcode 6.0 Beta 5 is het nu mogelijk om je eigen frameworks in een playground te importeren. Dit biedt een manier om code te delen tussen uw applicaties en playgrounds, die beide uw frameworks kunnen importeren. Om dit te doen:

  1. Je speeltuin moet zich in dezelfde werkruimte bevinden als het project dat je raamwerk produceert. Uw werkruimte moet een doel bevatten dat het raamwerk produceert, in plaats van een vooraf gebouwd raamwerk te gebruiken.

  2. Je moet je framework al hebben gebouwd. Als het een iOS-framework is, moet het zijn gebouwd voor een 64-bits run-bestemming (bijv. iPhone 5s) en moet het zijn gebouwd voor de Simulator.

  3. Je moet een actief schema hebben dat ten minste één doel bouwt (de bouwlocatie van dat doel wordt gebruikt in het zoekpad voor de speeltuin).

  4. Uw voorkeur voor ‘Locatie bouwen’ (in geavanceerde instellingen voor ‘Locaties’ van Xcode) mag niet worden ingesteld op ‘Verouderd’.

  5. Als uw framework geen Swift-framework is, moet de build-instelling “Definieert Module” worden ingesteld op “Ja”.

  6. Je moet een importstatement toevoegen aan je playground voor het framework.

Zodra aan al deze voorwaarden is voldaan, werkt het importeren van uw framework in een speeltuin.

In Xcode 7 hebben we een ander mechanisme geïntroduceerd dat je kunt gebruiken om je eigen klassen als bron te importeren, in plaats van een framework te importeren; u kunt over deze ondersteuning voor “hulpbronnen” lezen op http://help.apple. com/xcode/mac/8.0/#/devfa5bea3af


Antwoord 2, autoriteit 32%

Ik ben er in feite in geslaagd om naar andere Swift-bestanden in het huidige project te verwijzen door dit te doen:

  • Maak een lege speelplaats en plaats ergens onder je project.
  • Open de YourPlayground.playground-bundel (ja, het is een bundel = map) in Terminal.
  • Bewerk contents.xcplaygroundbijvoorbeeld met vien voeg een andere sectie toe zoals deze:
<?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>
  • Hernoem section-1.swiftnaar section-2.swift(als je de Playground helemaal opnieuw hebt gemaakt, zou er een voorbeeld van section-1.swiftin je bundel)
  • Voeg een harde linktoe (symbolische link lijkt niet te werken) met de naam section-1.swiftdie buiten de bundel naar je Swift-klassebestand zal verwijzen, zoals:
ln ../../Classes/MyView.swift section-1.swift
  • Sluit Xcode en open de Playground opnieuw.
  • Er zouden nu twee secties moeten zijn, één met de inhoud van je Swift-klassebestand en de andere met de voorbeeldinhoud die je hebt gekregen door de Playground helemaal opnieuw te maken.

Op deze manier kan ik code uitvoeren die buiten de Playground ligt, maar Xcode lijkt vaker te crashen als ik het op deze manier doe.

Bewerken:

Vanaf Xcode 6 beta 5 kun je nu verwijzen naar projectbestanden, zoals Rick Ballard aangeeft in zijn antwoord.


Antwoord 3, autoriteit 21%

Sinds Beta 5 van Xcode 6 is het mogelijk om uw code te importeren als deze zich in een framework bevindt. Wat u moet doen, is een kaderdoel maken, de Swift-bestanden daar toevoegen en in uw speeltuin doen

import ModuleName

Je kunt de modulenaam opzoeken in de build-instellingen. Het is meestal hetzelfde als de doelnaam.

Vergeet niet om de code die u wilt zien publicte maken. Je moet het project bouwen voordat er wijzigingen beschikbaar zijn in de speeltuin. (Je moet ook de speeltuin bewerken om heruitvoering te activeren.)

Belangrijk

Geef het speelveld niet dezelfde naam als het doel! Als je dat doet, lijkt het importeren te werken, maar je krijgt de volgende foutmelding wanneer de speeltuin probeert uit te voeren:

Uitvoering van speelplaats mislukt: fout: kon symbolen niet opzoeken:

Ik heb een uur verspild om dat uit te zoeken. 🙂


Antwoord 4, autoriteit 18%

Ik kreeg het niet werkend met een van de antwoorden hier, dus ik begon te spelen en vond een eenvoudige manier die voor mij werkte om een ​​snelle klas in een speeltuin te importeren.

Maak gewoon een speeltuin in uw project, er is een map erin genaamd ‘bronnen’, sleep gewoon een kopie van de swift-klasse naar die map en de speeltuin heeft er dan toegang toe.

Bijvoorbeeld:

enter afbeelding beschrijving hier


Antwoord 5, autoriteit 7%

Ik heb zojuist links naar al mijn Swift-bestanden in de map Sourcesgeplaatst:

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

Op deze manier worden wijzigingen in uw bronbestand onmiddellijk van kracht in uw playground. Werkte erg goed.

Xcode 8.2, Swift 3.0.1, macOS Sierra


Antwoord 6

Je hoeft alleen maar in het begin te schrijven:

import ModuleName

(ervan uitgaande dat uw speeltuin in dezelfde werkruimte is geplaatst als kader/project)

Als het niet werkt:

  1. Bouw uw project opnieuw op

  2. Maak de speeltuin opnieuw en kopieer daar alles van de oude speeltuin

Het lost veel vreemde fouten op met mislukte init’s en importsvan wat dan ook!

Other episodes