Pergunta

Suponha uma configuração como esta:

  • Você tem um projeto Xcode 6, onde implementou suas próprias classes (digamos MyView e MyViewController) com Objective-C e Swift
  • Você adicionou um Playground ao seu projeto

No Playground é possível importar módulos (frameworks) como UIKit com o import palavra-chave.Como você habilita o acesso às demais classes do projeto no Playground?

Apenas tentar acessar as classes do projeto diretamente resulta em uma mensagem de erro:Uso do identificador não resolvido 'MyView'

Foi útil?

Solução

A partir do Xcode 6.0 Beta 5, agora é possível importar seus próprios frameworks para um playground.Isso fornece uma maneira de compartilhar código entre seus aplicativos e playgrounds, que podem importar suas estruturas.Para fazer isso:

  1. Seu playground deve estar no mesmo espaço de trabalho do projeto que produz sua estrutura.Seu espaço de trabalho deve conter um destino que produza a estrutura, em vez de usar uma estrutura pré-construída.

  2. Você já deve ter construído sua estrutura.Se for uma estrutura iOS, ela deverá ser construída para um destino de execução de 64 bits (por exemplo,iPhone 5s) e deve ser construído para o Simulador.

  3. Você deve ter um esquema ativo que construa pelo menos um destino (o local de construção desse destino será usado no caminho de pesquisa da estrutura para o playground).

  4. Sua preferência de "Local de construção" (nas configurações avançadas de "Locais" do Xcode) não deve ser definida como "Legado".

  5. Se sua estrutura não for uma estrutura Swift, a configuração de construção "Define Module" deverá ser definida como "Sim".

  6. Você deve adicionar uma instrução de importação ao seu playground para a estrutura.

Depois que todas essas condições forem atendidas, a importação de sua estrutura funcionará perfeitamente.

No Xcode 7 introduzimos outro mecanismo que você pode usar para importar suas próprias classes como fonte, em vez de importar um framework;você pode ler sobre esse suporte de "Fontes Auxiliares" em http://help.apple.com/xcode/mac/8.0/#/devfa5bea3af

Outras dicas

Na verdade, consegui me referir a outros arquivos Swift no projeto atual fazendo o seguinte:

  • Crie um Playground vazio e coloque-o em algum lugar do seu projeto.
  • Abra o YourPlayground.playground bundle (sim, é um diretório bundle =) no Terminal.
  • Editar contents.xcplayground por exemplo com vi e adicione outra seção como esta:
<?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>
  • Renomear section-1.swift para section-2.swift (se você criou o Playground do zero, deve haver um exemplo section-1.swift em seu pacote)
  • Adicione um link físico (o link simbólico parece não funcionar) nomeado section-1.swift que apontará para fora do pacote para o seu arquivo de classe Swift como:
ln ../../Classes/MyView.swift section-1.swift
  • Feche o Xcode e abra o Playground novamente.
  • Agora deve haver duas seções, uma com o conteúdo do seu arquivo de classe Swift e outra com o conteúdo de exemplo que você obteve ao criar o Playground do zero.

Dessa forma, posso executar código fora do Playground, mas o Xcode parece travar com mais frequência ao fazer isso assim.

Editar:

A partir do Xcode 6 beta 5, agora você pode fazer referência aos arquivos do projeto, como Rick Ballard instrui em seu responder.

Desde o Beta 5 do Xcode 6 é possível importar seu código se ele estiver em um framework.O que você precisa fazer é criar um framework target, adicionar os arquivos Swift lá e no seu playground fazer

import ModuleName

Você pode procurar o nome do módulo nas configurações de compilação.Geralmente é igual ao nome do destino.

Lembre-se de fazer o código que deseja ver public.Você precisará compilar o projeto antes que as alterações estejam disponíveis no playground.(Você também precisará editar o playground para acionar a reexecução.)

Importante

Não dê ao arquivo do playground o mesmo nome do alvo!Se fizer isso, a importação parece funcionar, mas você receberá o seguinte erro quando o playground tentar executar:

Falha na execução do playground:erro:Não foi possível pesquisar símbolos:

Perdi uma hora tentando descobrir isso.:)

Não consegui fazê-lo funcionar usando nenhuma das respostas aqui, então comecei a brincar e encontrei uma maneira simples que funcionou para importar uma aula rápida para um playground.

Basta criar um playground em seu projeto, existe um diretório dentro dele chamado 'sources', basta arrastar uma cópia da classe swift para essa pasta e o playground terá acesso a ela.

Por exemplo:

enter image description here

Acabei de colocar links para todos os meus arquivos rápidos no Sources pasta:

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

Dessa forma, as alterações no seu arquivo de origem terão efeito imediato no seu playground. Funcionou muito bem.

Xcode 8.2, Swift 3.0.1, macOS Sierra

Tudo que você precisa fazer é escrever no início:

import ModuleName

(assumindo que seu playground esteja localizado no mesmo espaço de trabalho da estrutura/projeto)

Se não funcionar:

  1. Reconstrua seu projeto

  2. Recrie o playground e copie tudo do antigo playground

Isso resolve muitas coisas estranhas erros com falhas de inicialização e importações de qualquer coisa!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top