어떻게 같은 수학 함수를 사용합니까 sqrt()
, floor()
, round()
, sin()
, 등?
할 때 :
_ = floor(2.0)
_ = sqrt(2.0)
나는 얻다:
오류 : 해결되지 않은 식별자 'floor'
사용 오류 : 해결되지 않은 식별자 'sqrt'사용
답변:
다른 언급했듯이 몇 가지 옵션이 있습니다. 수학 함수 만 원하는 경우. Darwin 만 가져올 수 있습니다.
import Darwin
수학 함수 및 기타 표준 클래스 및 함수를 원하는 경우. Foundation을 가져올 수 있습니다.
import Foundation
사용자 인터페이스에 대한 모든 것과 클래스를 원한다면 플레이 그라운드가 OS X 또는 iOS 용인지 여부에 따라 다릅니다.
OS X의 경우 Cocoa를 가져와야합니다.
import Cocoa
iOS의 경우 가져 오기 UIKit이 필요합니다.
import UIKit
File Inspector (⌥⌘1)를 열어 플레이 그라운드 플랫폼을 쉽게 찾을 수 있습니다.
No such module 'Cocoa'
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
당신은 재단 프레임 워크의 개발을 따를 수 있습니다 여기에 자세한 내용을 보려면
으로 지적 으로 쾨르 @ 빠른 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
sqrt
, floor
그리고 round
당신이 기본적으로 각각 사용할 수 있기 때문에 0.5.squareRoot()
, Int(0.5)
하고 0.5.round()
.
pow
나는 포함하는 데 필요한 Glibc
, 리눅스에 대한 감사합니다!
바로 인라인으로 사용할 수 있습니다.
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,2,3]
그것은 돌아올 것입니다 y = x
또는 나는 그것을 줄 것입니다 [1,4,9] 그것은 돌아올 것입니다 y = x^2
또는 그런 식으로 그냥 닫힐 것입니다f(x)
수학 함수를 사용하려면 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) */
...
import Cocoa
그들을 사용해야합니다.
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()
부동 소수점 프로토콜에 대한 방법. 다시 말하지만, 모두 Float
와 Double
을 준수 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"
Ambiguous reference to x
: 아웃이 답변 확인 stackoverflow.com/a/34357943/1359306