Swift의 수학 함수


95

어떻게 같은 수학 함수를 사용합니까 sqrt(), floor(), round(), sin(), 등?


할 때 :

_ = floor(2.0)
_ = sqrt(2.0)

나는 얻다:

오류 : 해결되지 않은 식별자 'floor'
사용 오류 : 해결되지 않은 식별자 'sqrt'사용

여기에 이미지 설명 입력


당신이 얻을 경우 Ambiguous reference to x: 아웃이 답변 확인 stackoverflow.com/a/34357943/1359306
패트릭

답변:


98

다른 언급했듯이 몇 가지 옵션이 있습니다. 수학 함수 만 원하는 경우. Darwin 만 가져올 수 있습니다.

import Darwin

수학 함수 및 기타 표준 클래스 및 함수를 원하는 경우. Foundation을 가져올 수 있습니다.

import Foundation

사용자 인터페이스에 대한 모든 것과 클래스를 원한다면 플레이 그라운드가 OS X 또는 iOS 용인지 여부에 따라 다릅니다.

OS X의 경우 Cocoa를 가져와야합니다.

import Cocoa

iOS의 경우 가져 오기 UIKit이 필요합니다.

import UIKit

File Inspector (⌥⌘1)를 열어 플레이 그라운드 플랫폼을 쉽게 찾을 수 있습니다.

플레이 그라운드 설정-플랫폼


6
Swift 플레이 그라운드에서 다음과 같은 오류가 발생합니다.No such module 'Cocoa'
David Poxon 2014-06-11

@noilly : 좀 늦게 지금, 당신은 위의 의견에 따라, 대신 놀이터의 파일 속성 (Cmd를-탈퇴 0), 또는 수입 UIKit에 아이폰 OS에 파일 형식을 설정해야합니다
크리스 코노

1
이러한 모듈 없다 '코코아'
알렉산더 볼코프

4
UIKit, Cocoa, Foundation, 모든 유효한 선택.
erdekhayser 2014

Cocoa 가져 오기는 iOS 애플리케이션에서 작동하지 않습니다. "No such module 'Cocoa'오류가 발생합니다. UIKit 만 가져 오면 sqrt () 사용시 오류가 발생합니다.
SomeGuy

77

정확히 말하면 다윈이면 충분합니다. 전체 Cocoa 프레임 워크를 가져올 필요가 없습니다.

import Darwin

물론 Cocoa, Foundation 또는 기타 상위 프레임 워크의 요소가 필요한 경우 대신 가져올 수 있습니다.


그리고 스위프트 3+, 당신은 다윈 (또는 Glibc의)가 필요하지 않습니다 sqrt, floor그리고 round당신이 기본적으로 각각 사용할 수 있기 때문에 0.5.squareRoot(), Int(0.5)하고 0.5.round().
Cœur

17

Linux, 즉 Ubuntu에서 swift [2.2]를 사용하는 사람들의 경우 가져 오기가 다릅니다!

이를 수행하는 올바른 방법은 Glibc를 사용하는 것입니다. OS X 및 iOS에서는 기본 Unix 유사 API가 Darwin에 있지만 Linux에서는 Glibc에 있기 때문입니다. Importing Foundation은 그 자체로 구별을하지 않기 때문에 여기서 도움이되지 않습니다. 이렇게하려면 명시 적으로 직접 가져와야합니다.

#if os(macOS) || os(iOS)
import Darwin
#elseif os(Linux) || CYGWIN
import Glibc
#endif

당신은 재단 프레임 워크의 개발을 따를 수 있습니다 여기에 자세한 내용을 보려면


수정 : 2018 년 12 월 26 일

으로 지적 으로 쾨르 @ 빠른 3.0부터, 일부 수학 함수는 이제 유형 자체의 일부입니다. 예를 들어 Double 에는 이제 squareRoot 함수가 있습니다. 마찬가지로, ceil, floor, round, 모두 달성 될 수있다 Double.rounded(FloatingPointRoundingRule) -> Double.

게다가 우분투 18.04에 최신 안정 버전의 swift를 다운로드하여 설치했는데, Foundation프레임 워크 만 있으면 수학 함수에 액세스 할 수 있습니다. 이에 대한 문서를 찾으려고했지만 아무것도 나오지 않았습니다.

➜ 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> import Foundation
  2> sqrt(9)
$R0: Double = 3
  3> floor(9.3)
$R1: Double = 9
  4> ceil(9.3) 
$R2: Double = 10

그리고 스위프트 3+, 당신은 다윈 (또는 Glibc의)가 필요하지 않습니다 sqrt, floor그리고 round당신이 기본적으로 각각 사용할 수 있기 때문에 0.5.squareRoot(), Int(0.5)하고 0.5.round().
Cœur

@ Cœur, 나는 한동안 swift와 연락이 끊겼습니다. 아마도 답의 형태로 이러한 통찰력을 제공 할 수있을 것입니다. 감사합니다
smac89

들어 pow나는 포함하는 데 필요한 Glibc, 리눅스에 대한 감사합니다!
A1rPun

10

바로 인라인으로 사용할 수 있습니다.

var square = 9.4
var 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)")

1
다음 오류가 발생합니다. 해결되지 않은 식별자 'sqrt'사용.
Giovanni

나는 그것이 내가 sqrt라는 함수를 선언 할 것으로 기대한다고 생각하지만 분명히 내가 원하는 것은 아닙니다. 감사합니다
Giovanni

UIKit, Cocoa 또는 Foundation을 가져와야합니다.
Ben Gottlieb

Int 배열을 줄 수있는 함수가 있고 Swift가 가장 일치하는 2의 거듭 제곱 (또는 1, 3 등)의 함수를 반환 할 수 있습니까? 내가주는 것처럼 : [1,2,3]그것은 돌아올 것입니다 y = x또는 나는 그것을 줄 것입니다 [1,4,9] 그것은 돌아올 것입니다 y = x^2또는 그런 식으로 그냥 닫힐 것입니다f(x)
Honey

나를 위해 작동하지만 내 놀이터는 기본적으로 UIKit을 가져옵니다. 또한 UIKit 대신 Foundation 또는 Darwin을 가져 와서 작동합니다.
Timbergus

8

수학 함수를 사용하려면 import Cocoa

다음과 같은 방법으로 다른 정의 된 수학 함수를 볼 수 있습니다. 함수 이름을 Cmd- 클릭 sqrt하고 다른 모든 전역 수학 함수 및 상수와 함께 파일을 입력합니다.

파일의 작은 조각

...
func pow(_: CDouble, _: CDouble) -> CDouble

func sqrtf(_: CFloat) -> CFloat
func sqrt(_: CDouble) -> CDouble

func erff(_: CFloat) -> CFloat
...
var M_LN10: CDouble { get } /* loge(10)       */
var M_PI: CDouble { get } /* pi             */
var M_PI_2: CDouble { get } /* pi/2           */
var M_SQRT2: CDouble { get } /* sqrt(2)        */
...

1
"sqlt (), floor (), round (), sin () 등과 같은 수학 함수를 어떻게 사용합니까?"라는 실제 질문에 대한 답변입니다.
DanEEStar 2014-06-03

2
정답이 아닙니다. 전역 함수가 아닙니다. 당신은 import Cocoa그들을 사용해야합니다.
James Billingham

3

Swift 방식으로 작업을 수행하려면 Swift Standard Library에있는 도구를 사용해 볼 수 있습니다. 이는 Swift를 실행할 수있는 모든 플랫폼에서 작동합니다.

대신 floor(), round()당신이 사용할 수있는 반올림 루틴의 나머지 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"

다음은 현재 가능 Float하고 Double그리고 그것은으로 쉽게 변환 할 충분해야한다 CGFloat예를 들어.

대신에 sqrt()있다 squareRoot()부동 소수점 프로토콜에 대한 방법. 다시 말하지만, 모두 FloatDouble을 준수 FloatingPoint프로토콜 :

let x = 4.0
let y = x.squareRoot()

삼각 함수의 경우 표준 라이브러리가 도움이되지 않으므로 Apple 플랫폼에서 Darwin을 가져 오거나 Linux에서 Glibc를 가져 오는 것이 가장 좋습니다. 손가락이 교차하면 앞으로 더 깔끔해질 것입니다.

#if os(OSX) || os(iOS)
import Darwin
#elseif os(Linux)
import Glibc
#endif

let x = 1.571
print(sin(x))
// Prints "~1.0"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.