No playground do Swift, recebo o erro:No such module 'Cocoa'
David Poxon
@noilly: meio tarde agora, você deve definir o tipo de arquivo para iOS nas propriedades de arquivo do Playground (Cmd-Opt-0) ou importar o UIKit, conforme o comentário acima
Chris Conover
1
Não existe tal módulo 'Cocoa'
Alexander Volkov
4
UIKit, Cocoa, Foundation, todas as opções válidas.
erdekhayser
Importar Cocoa não funciona em aplicativos iOS. O erro "Não existe tal módulo 'Cacau' surge. Se você apenas importar o UIKit, receberá um erro ao usar sqrt ().
SomeGuy
77
Para ser perfeitamente preciso, Darwin é o suficiente. Não há necessidade de importar todo o framework Cocoa.
importDarwin
Claro, se você precisa de elementos Cocoa ou Foundation ou outros frameworks de nível superior, você pode importá-los
E com Swift 3+, você não precisa de Darwin (ou Glibc) para sqrt, floore roundporque você pode nativamente usar respectivamente 0.5.squareRoot(), Int(0.5)e 0.5.round().
Cœur
17
Para pessoas que usam swift [2.2] no Linux, ou seja, no Ubuntu, a importação é diferente!
A maneira correta de fazer isso é usando Glibc. Isso ocorre porque no OS X e no iOS, as APIs básicas do tipo Unix estão no Darwin, mas no Linux, elas estão localizadas no Glibc. O Importing Foundation não ajudará você aqui porque não faz a distinção por si só. Para fazer isso, você deve importá-lo explicitamente:
Além disso, acabei de baixar e instalar a última versão estável do swift no Ubuntu 18.04, e parece que o Foundationframework é tudo que você precisa importar para ter acesso às funções matemáticas agora. Tentei encontrar documentação para isso, mas não apareceu nada.
➜ swift
Welcome to Swift version 4.2.1(swift-4.2.1-RELEASE).Type:help for assistance.1> sqrt(9)
error: repl.swift:1:1: error: use of unresolved identifier 'sqrt'
sqrt(9)^~~~1>importFoundation2> sqrt(9)
$R0:Double=33> floor(9.3)
$R1:Double=94> ceil(9.3)
$R2:Double=10
E com Swift 3+, você não precisa de Darwin (ou Glibc) para sqrt, floore roundporque você pode nativamente usar respectivamente 0.5.squareRoot(), Int(0.5)e 0.5.round().
Cœur
@ Cœur, há um tempo que não tenho contato com o Swift. Talvez você possa oferecer esse insight na forma de uma resposta. Obrigado
smac89
Pois poweu precisava incluir Glibcpara Linux, obrigado!
A1rPun
10
Você pode usá-los diretamente em linha:
var square =9.4var floored = floor(square)var root = sqrt(floored)
println("Starting with \(square), we rounded down to \(floored), then took the square root to end up with \(root)")
Recebo o seguinte erro: uso do identificador não resolvido 'sqrt'.
Giovanni
Acho que ele espera que eu declare uma função chamada sqrt, mas obviamente não é o que eu quero. Obrigado
Giovanni
Você precisa importar o UIKit, ou Cocoa, ou Foundation.
Ben Gottlieb
existe uma função onde eu posso dar a ele um array de Ints e então o Swift me retornaria uma função de potência de 2 (ou 1, ou 3, ou qualquer outra) que melhor corresponda a isso? como eu dou: [1,2,3]ele retornaria y = xou eu daria [1,4,9] ele retornaria y = x^2ou algo perto dessa maneiraf(x)
Honey
Está funcionando para mim, mas meu playground importa o UIKit por padrão. E funciona também, importando Foundation ou Darwin em vez do UIKit.
Timbergus
8
Para usar as funções matemáticas, você deve import Cocoa
Você pode ver as outras funções matemáticas definidas da seguinte maneira. Faça um Cmd-Click no nome da função sqrte insira o arquivo com todas as outras funções matemáticas globais e constantes.
Bem, é uma resposta à questão real "Como faço para usar funções matemáticas como sqrt (), floor (), round (), sin (), etc?"
DanEEStar
2
Não é uma resposta correta. Eles não são funções globais. Você tem que import Cocoausá-los.
James Billingham
3
Para a maneira Swift de fazer as coisas, você pode experimentar e usar as ferramentas disponíveis na Biblioteca Padrão do Swift. Eles devem funcionar em qualquer plataforma capaz de executar o Swift.
Em vez de floor(), round()e o resto das rotinas de arredondamento, você pode usar rounded(_:):
let x =6.5// Equivalent to the C 'round' function:
print(x.rounded(.toNearestOrAwayFromZero))// Prints "7.0"
// Equivalent to the C 'trunc' function:
print(x.rounded(.towardZero))// Prints "6.0"
// Equivalent to the C 'ceil' function:
print(x.rounded(.up))// Prints "7.0"
// Equivalent to the C 'floor' function:
print(x.rounded(.down))//Prints"6.0"
Eles estão disponíveis atualmente em Floate Doubledeve ser fácil o suficiente para converter para um, CGFloatpor exemplo.
Em vez disso, sqrt()há o squareRoot()método no protocolo FloatingPoint. Novamente, ambos Floate Doubleestão em conformidade com o FloatingPointprotocolo:
let x =4.0let y = x.squareRoot()
Para as funções trigonométricas, a biblioteca padrão não pode ajudar, então é melhor importar Darwin nas plataformas Apple ou Glibc no Linux. Dedos cruzados, eles serão uma maneira mais organizada no futuro.
#if os(OSX)|| os(iOS)importDarwin#elseif os(Linux)importGlibc#endif
let x =1.571
print(sin(x))//Prints"~1.0"
Ambiguous reference to x
resposta, verifique esta resposta: stackoverflow.com/a/34357943/1359306Respostas:
Como outro notado, você tem várias opções. Se você quiser apenas funções matemáticas. Você pode importar apenas Darwin.
Se você deseja funções matemáticas e outras classes e funções padrão. Você pode importar Foundation.
Se você quer tudo e também aulas para interface de usuário, depende se seu playground é para OS X ou iOS.
Para OS X, você precisa importar o Cocoa.
Para iOS, você precisa importar o UIKit.
Você pode descobrir facilmente sua plataforma de playground abrindo o Inspetor de Arquivos (⌥⌘1).
fonte
No such module 'Cocoa'
Para ser perfeitamente preciso, Darwin é o suficiente. Não há necessidade de importar todo o framework Cocoa.
Claro, se você precisa de elementos Cocoa ou Foundation ou outros frameworks de nível superior, você pode importá-los
fonte
sqrt
,floor
eround
porque você pode nativamente usar respectivamente0.5.squareRoot()
,Int(0.5)
e0.5.round()
.Para pessoas que usam swift [2.2] no Linux, ou seja, no Ubuntu, a importação é diferente!
A maneira correta de fazer isso é usando Glibc. Isso ocorre porque no OS X e no iOS, as APIs básicas do tipo Unix estão no Darwin, mas no Linux, elas estão localizadas no Glibc. O Importing Foundation não ajudará você aqui porque não faz a distinção por si só. Para fazer isso, você deve importá-lo explicitamente:
Você pode acompanhar o desenvolvimento da estrutura da Fundação aqui para saber mais
EDITAR: 26 de dezembro de 2018
Como apontado por @ Cœur , a partir do swift 3.0, algumas funções matemáticas agora fazem parte dos próprios tipos. Por exemplo, Double agora tem uma função squareRoot . Da mesma forma,
ceil
,floor
,round
, tudo pode ser conseguido comDouble.rounded(FloatingPointRoundingRule) -> Double
.Além disso, acabei de baixar e instalar a última versão estável do swift no Ubuntu 18.04, e parece que o
Foundation
framework é tudo que você precisa importar para ter acesso às funções matemáticas agora. Tentei encontrar documentação para isso, mas não apareceu nada.fonte
sqrt
,floor
eround
porque você pode nativamente usar respectivamente0.5.squareRoot()
,Int(0.5)
e0.5.round()
.pow
eu precisava incluirGlibc
para Linux, obrigado!Você pode usá-los diretamente em linha:
fonte
[1,2,3]
ele retornariay = x
ou eu daria [1,4,9] ele retornariay = x^2
ou algo perto dessa maneiraf(x)
Para usar as funções matemáticas, você deve
import Cocoa
Você pode ver as outras funções matemáticas definidas da seguinte maneira. Faça um Cmd-Click no nome da função
sqrt
e insira o arquivo com todas as outras funções matemáticas globais e constantes.Um pequeno trecho do arquivo
fonte
import Cocoa
usá-los.Para a maneira Swift de fazer as coisas, você pode experimentar e usar as ferramentas disponíveis na Biblioteca Padrão do Swift. Eles devem funcionar em qualquer plataforma capaz de executar o Swift.
Em vez de
floor()
,round()
e o resto das rotinas de arredondamento, você pode usarrounded(_:)
:Eles estão disponíveis atualmente em
Float
eDouble
deve ser fácil o suficiente para converter para um,CGFloat
por exemplo.Em vez disso,
sqrt()
há osquareRoot()
método no protocolo FloatingPoint. Novamente, ambosFloat
eDouble
estão em conformidade com oFloatingPoint
protocolo:Para as funções trigonométricas, a biblioteca padrão não pode ajudar, então é melhor importar Darwin nas plataformas Apple ou Glibc no Linux. Dedos cruzados, eles serão uma maneira mais organizada no futuro.
fonte