En el patio de recreo de Swift, aparece el error:No such module 'Cocoa'
David Poxon
@noilly: un poco tarde ahora, debe establecer el tipo de archivo en iOS en las propiedades del archivo de Playground (Cmd-Opt-0), o importar UIKit en su lugar, según el comentario anterior
Chris Conover
1
No existe tal módulo 'Cocoa'
Alexander Volkov
4
UIKit, Cocoa, Foundation, todas las opciones válidas.
erdekhayser
Importar Cocoa no funciona en aplicaciones de iOS. Aparece el error "No existe tal módulo 'Cocoa'. Si solo importa UIKit, obtendrá un error al usar sqrt ().
SomeGuy
77
Para ser perfectamente preciso, Darwin es suficiente. No es necesario importar todo el marco de Cocoa.
importDarwin
Por supuesto, si necesita elementos de Cocoa o Foundation u otros marcos de nivel superior, puede importarlos en su lugar
Y con Swift 3+, no necesita Darwin (o Glibc) para sqrt, floory roundporque puede usar de forma nativa 0.5.squareRoot(), respectivamente , Int(0.5)y 0.5.round().
Cœur
17
Para las personas que usan swift [2.2] en Linux, es decir, Ubuntu, ¡la importación es diferente!
La forma correcta de hacer esto es usar Glibc. Esto se debe a que en OS X e iOS, las API básicas similares a Unix están en Darwin, pero en Linux, se encuentran en Glibc. Importar Foundation no lo ayudará aquí porque no hace la distinción por sí mismo. Para hacer esto, debe importarlo explícitamente usted mismo:
Además, acabo de descargar e instalar la última versión estable de swift en Ubuntu 18.04, y parece que el Foundationmarco es todo lo que necesita importar para tener acceso a las funciones matemáticas ahora. Intenté encontrar documentación para esto, pero no surgió 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
Y con Swift 3+, no necesita Darwin (o Glibc) para sqrt, floory roundporque puede usar de forma nativa 0.5.squareRoot(), respectivamente , Int(0.5)y 0.5.round().
Cœur
@ Cœur, he estado fuera de contacto con Swift por un tiempo. Quizás pueda ofrecer esta idea en forma de respuesta. Gracias
smac89
Porque pownecesitaba incluirlo Glibcpara Linux, ¡gracias!
A1rPun
10
Puede usarlos directamente en línea:
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)")
Recibo el siguiente error: uso del identificador 'sqrt' sin resolver.
Giovanni
Creo que espera que declare una función llamada sqrt, pero obviamente no es lo que quiero. Gracias
Giovanni
Necesita importar UIKit, Cocoa o Foundation.
Ben Gottlieb
¿Hay alguna función en la que pueda darle una matriz de Ints y luego Swift me devolvería una función de potencia de 2 (o 1, o 3, o lo que sea) que mejor se adapte a ella? como le doy: [1,2,3]volvería y = xo le daría [1, 4, 9] volvería y = x^2o algo parecido de esa maneraf(x)
Cariño
Me funciona, pero mi patio de recreo importa UIKit por defecto. Y también funciona, importando Foundation o Darwin en lugar de UIKit.
Timbergus
8
Para usar las funciones matemáticas tienes que import Cocoa
Puede ver las otras funciones matemáticas definidas de la siguiente manera. Haga un Cmd-Click en el nombre de la función sqrte ingrese el archivo con todas las demás funciones matemáticas globales y constanst.
Bueno, es una respuesta a la pregunta real "¿Cómo uso funciones matemáticas como sqrt (), floor (), round (), sin (), etc.?"
DanEEStar
2
No es una respuesta correcta. No son funciones globales. Tienes que import Cocoausarlos.
James Billingham
3
Para la forma Swift de hacer las cosas, puede probar y hacer uso de las herramientas disponibles en la Biblioteca estándar de Swift. Estos deberían funcionar en cualquier plataforma que pueda ejecutar Swift.
En lugar de floor(), round()y el resto de las rutinas de redondeo, puede utilizar 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"
Estos están disponibles actualmente en Floaty Doubledebería ser bastante fácil convertirlos a, CGFloatpor ejemplo.
En lugar de sqrt()está el squareRoot()método en el protocolo FloatingPoint. Nuevamente, ambos Floaty se Doubleajustan al FloatingPointprotocolo:
let x =4.0let y = x.squareRoot()
Para las funciones trigonométricas, la biblioteca estándar no puede ayudar, por lo que es mejor que importe Darwin en las plataformas Apple o Glibc en Linux. Con los dedos cruzados, serán una forma más ordenada en el 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
respuesta, consulte esta respuesta: stackoverflow.com/a/34357943/1359306Respuestas:
Como señalaron otros, tiene varias opciones. Si solo quieres funciones matemáticas. Solo puede importar Darwin.
Si desea funciones matemáticas y otras clases y funciones estándar. Puede importar Foundation.
Si quieres todo y también clases para la interfaz de usuario, depende de si tu patio de juegos es para OS X o iOS.
Para OS X, necesita importar Cocoa.
Para iOS, necesita importar UIKit.
Puede descubrir fácilmente su plataforma de juegos abriendo File Inspector (⌥⌘1).
fuente
No such module 'Cocoa'
Para ser perfectamente preciso, Darwin es suficiente. No es necesario importar todo el marco de Cocoa.
Por supuesto, si necesita elementos de Cocoa o Foundation u otros marcos de nivel superior, puede importarlos en su lugar
fuente
sqrt
,floor
yround
porque puede usar de forma nativa0.5.squareRoot()
, respectivamente ,Int(0.5)
y0.5.round()
.Para las personas que usan swift [2.2] en Linux, es decir, Ubuntu, ¡la importación es diferente!
La forma correcta de hacer esto es usar Glibc. Esto se debe a que en OS X e iOS, las API básicas similares a Unix están en Darwin, pero en Linux, se encuentran en Glibc. Importar Foundation no lo ayudará aquí porque no hace la distinción por sí mismo. Para hacer esto, debe importarlo explícitamente usted mismo:
Puede seguir el desarrollo del marco Foundation aquí para obtener más información.
EDITAR: 26 de diciembre de 2018
Como se ha señalado por @ Coeur , a partir de 3,0 veloz algunas funciones matemáticas son ahora parte de los mismos tipos. Por ejemplo, Double ahora tiene una función squareRoot . Del mismo modo,
ceil
,floor
,round
, todo puede lograrse conDouble.rounded(FloatingPointRoundingRule) -> Double
.Además, acabo de descargar e instalar la última versión estable de swift en Ubuntu 18.04, y parece que el
Foundation
marco es todo lo que necesita importar para tener acceso a las funciones matemáticas ahora. Intenté encontrar documentación para esto, pero no surgió nada.fuente
sqrt
,floor
yround
porque puede usar de forma nativa0.5.squareRoot()
, respectivamente ,Int(0.5)
y0.5.round()
.pow
necesitaba incluirloGlibc
para Linux, ¡gracias!Puede usarlos directamente en línea:
fuente
[1,2,3]
volveríay = x
o le daría [1, 4, 9] volveríay = x^2
o algo parecido de esa maneraf(x)
Para usar las funciones matemáticas tienes que
import Cocoa
Puede ver las otras funciones matemáticas definidas de la siguiente manera. Haga un Cmd-Click en el nombre de la función
sqrt
e ingrese el archivo con todas las demás funciones matemáticas globales y constanst.Un pequeño fragmento del archivo
fuente
import Cocoa
usarlos.Para la forma Swift de hacer las cosas, puede probar y hacer uso de las herramientas disponibles en la Biblioteca estándar de Swift. Estos deberían funcionar en cualquier plataforma que pueda ejecutar Swift.
En lugar de
floor()
,round()
y el resto de las rutinas de redondeo, puede utilizarrounded(_:)
:Estos están disponibles actualmente en
Float
yDouble
debería ser bastante fácil convertirlos a,CGFloat
por ejemplo.En lugar de
sqrt()
está elsquareRoot()
método en el protocolo FloatingPoint. Nuevamente, ambosFloat
y seDouble
ajustan alFloatingPoint
protocolo:Para las funciones trigonométricas, la biblioteca estándar no puede ayudar, por lo que es mejor que importe Darwin en las plataformas Apple o Glibc en Linux. Con los dedos cruzados, serán una forma más ordenada en el futuro.
fuente