Câu trả lời:
Như đã lưu ý khác, bạn có một số tùy chọn. Nếu bạn chỉ muốn các hàm toán học. Bạn chỉ có thể nhập Darwin.
import Darwin
Nếu bạn muốn các hàm toán học và các lớp và hàm tiêu chuẩn khác. Bạn có thể nhập Foundation.
import Foundation
Nếu bạn muốn mọi thứ và cả các lớp cho giao diện người dùng, điều đó phụ thuộc vào sân chơi của bạn dành cho OS X hay iOS.
Đối với OS X, bạn cần nhập Cacao.
import Cocoa
Đối với iOS, bạn cần nhập UIKit.
import UIKit
Bạn có thể dễ dàng khám phá nền tảng sân chơi của mình bằng cách mở Trình kiểm tra tệp (⌥⌘1).
No such module 'Cocoa'
Nói chính xác một cách hoàn hảo, Darwin là đủ. Không cần nhập toàn bộ khuôn khổ Cacao.
import Darwin
Tất nhiên, nếu bạn cần các phần tử từ Cacao hoặc Foundation hoặc các khuôn khổ cấp cao khác, bạn có thể nhập chúng để thay thế
sqrt
, floor
và round
bởi vì bạn có thể sử dụng nguyên bản tương ứng 0.5.squareRoot()
, Int(0.5)
và 0.5.round()
.
Đối với những người sử dụng swift [2.2] trên Linux tức là Ubuntu, việc nhập là khác nhau!
Cách chính xác để làm điều này là sử dụng Glibc. Điều này là do trên OS X và iOS, các API cơ bản giống Unix nằm trong Darwin nhưng trong linux, các API này nằm trong Glibc. Quỹ nhập khẩu sẽ không giúp bạn ở đây vì bản thân nó không tạo ra sự khác biệt. Để làm điều này, bạn phải tự nhập rõ ràng:
#if os(macOS) || os(iOS)
import Darwin
#elseif os(Linux) || CYGWIN
import Glibc
#endif
Bạn có thể theo dõi sự phát triển của khuôn khổ Foundation tại đây để tìm hiểu thêm
Như đã chỉ ra bởi @ Cœur , bắt đầu từ phiên bản nhanh 3.0, một số hàm toán học giờ đây đã trở thành một phần của chính các loại này. Ví dụ, Double bây giờ có một chức năng squareRoot . Tương tự như vậy, ceil
, floor
, round
, đều có thể được thực hiện với Double.rounded(FloatingPointRoundingRule) -> Double
.
Hơn nữa, tôi vừa tải xuống và cài đặt phiên bản swift ổn định mới nhất trên Ubuntu 18.04 và có vẻ như Foundation
framework là tất cả những gì bạn cần nhập để có quyền truy cập vào các hàm toán học ngay bây giờ. Tôi đã thử tìm tài liệu cho việc này, nhưng không có gì xuất hiện.
➜ 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
và round
bởi vì bạn có thể sử dụng nguyên bản tương ứng 0.5.squareRoot()
, Int(0.5)
và 0.5.round()
.
pow
tôi cần đưa Glibc
vào Linux, cảm ơn!
Bạn có thể sử dụng chúng ngay trong dòng:
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]
nó sẽ trở lại y = x
hoặc tôi sẽ đưa nó [1,4,9] nó sẽ trở lại y = x^2
hoặc một cái gì đó chỉ đóng cửa theo cách đóf(x)
Để sử dụng các hàm toán học, bạn phải import Cocoa
Bạn có thể xem các hàm toán học được định nghĩa khác theo cách sau. Tạo Cmd-Click vào tên hàm sqrt
và bạn nhập tệp với tất cả các hàm toán học toàn cục khác và constanst.
Một đoạn nhỏ của tệp
...
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
sử dụng chúng.
Đối với cách hoạt động của Swift, bạn có thể thử và sử dụng các công cụ có sẵn trong Thư viện chuẩn Swift. Chúng sẽ hoạt động trên bất kỳ nền tảng nào có thể chạy Swift.
Thay vì floor()
, round()
và phần còn lại của các quy trình làm tròn bạn có thể sử dụng 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"
Chúng hiện có sẵn trên Float
và Double
nó phải đủ dễ dàng để chuyển đổi thành một CGFloat
ví dụ.
Thay vì sqrt()
có squareRoot()
phương pháp trên giao thức FloatingPoint. Một lần nữa, cả hai Float
và Double
tuân theo FloatingPoint
giao thức:
let x = 4.0
let y = x.squareRoot()
Đối với các hàm lượng giác, thư viện chuẩn không thể giúp được gì, vì vậy tốt nhất bạn nên nhập Darwin trên nền tảng Apple hoặc Glibc trên Linux. Chúng sẽ là một cách gọn gàng hơn trong tương lai.
#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
kiểm tra câu trả lời này ra: stackoverflow.com/a/34357943/1359306