ฉันจะใช้ฟังก์ชั่นทางคณิตศาสตร์เช่นวิธีsqrt(), floor(), round(), sin()etc?
เมื่อทำ:
_ = floor(2.0)
_ = sqrt(2.0)
ฉันเข้าใจ:
ข้อผิดพลาด: การใช้ข้อผิดพลาด 'floor' ตัวระบุที่ไม่ได้รับการแก้ไข
: การใช้ตัวระบุที่ไม่ได้รับการแก้ไข 'sqrt'

ฉันจะใช้ฟังก์ชั่นทางคณิตศาสตร์เช่นวิธีsqrt(), floor(), round(), sin()etc?
เมื่อทำ:
_ = floor(2.0)
_ = sqrt(2.0)
ฉันเข้าใจ:
ข้อผิดพลาด: การใช้ข้อผิดพลาด 'floor' ตัวระบุที่ไม่ได้รับการแก้ไข
: การใช้ตัวระบุที่ไม่ได้รับการแก้ไข 'sqrt'

คำตอบ:
ตามที่ระบุไว้คุณมีหลายทางเลือก หากคุณต้องการเพียงฟังก์ชันทางคณิตศาสตร์ คุณสามารถนำเข้าได้เฉพาะดาร์วิน
import Darwin
หากคุณต้องการฟังก์ชันทางคณิตศาสตร์และคลาสและฟังก์ชันมาตรฐานอื่น ๆ คุณสามารถนำเข้า Foundation
import Foundation
หากคุณต้องการทุกอย่างและยังมีคลาสสำหรับอินเทอร์เฟซผู้ใช้ขึ้นอยู่กับว่า Playground ของคุณใช้สำหรับ OS X หรือ iOS
สำหรับ OS X คุณต้องนำเข้าโกโก้
import Cocoa
สำหรับ iOS คุณต้องนำเข้า UIKit
import UIKit
คุณสามารถค้นพบแพลตฟอร์มสนามเด็กเล่นของคุณได้อย่างง่ายดายโดยเปิด File Inspector (⌥⌘1)

No such module 'Cocoa'
เพื่อความแม่นยำอย่างสมบูรณ์แบบดาร์วินก็เพียงพอแล้ว ไม่ต้องนำเข้า Cocoa ทั้งกรอบ
import Darwin
แน่นอนว่าหากคุณต้องการองค์ประกอบจาก Cocoa หรือ Foundation หรือเฟรมเวิร์กระดับสูงกว่าอื่น ๆ คุณสามารถนำเข้ามาแทนได้
sqrt, floorและroundเพราะคุณกำเนิดอาจจะใช้ตามลำดับ0.5.squareRoot(),Int(0.5)0.5.round()และ
สำหรับคนที่ใช้ swift [2.2] บน Linux เช่น Ubuntu การนำเข้าจะแตกต่างกัน!
วิธีที่ถูกต้องคือใช้ Glibc เนื่องจากใน OS X และ iOS API พื้นฐานคล้าย Unix อยู่ในดาร์วิน แต่ใน linux ซึ่งอยู่ใน Glibc Importing Foundation จะไม่ช่วยคุณตรงนี้เพราะมันไม่ได้สร้างความแตกต่างด้วยตัวมันเอง ในการดำเนินการนี้คุณต้องนำเข้าด้วยตนเองอย่างชัดเจน:
#if os(macOS) || os(iOS)
import Darwin
#elseif os(Linux) || CYGWIN
import Glibc
#endif
คุณสามารถติดตามการพัฒนากรอบของมูลนิธิได้ที่นี่เพื่อเรียนรู้เพิ่มเติม
ตามที่ระบุไว้โดย@ Cœurเริ่มต้นจากการที่รวดเร็ว 3.0 บางฟังก์ชั่นทางคณิตศาสตร์ในขณะนี้เป็นส่วนหนึ่งของประเภทของตัวเอง ตัวอย่างเช่นตอนนี้Doubleมีฟังก์ชันsquareRoot ในทำนองเดียวกันceil, floor, round, Double.rounded(FloatingPointRoundingRule) -> Doubleทั้งหมดจะสามารถประสบความสำเร็จกับ
นอกจากนี้ฉันเพิ่งดาวน์โหลดและติดตั้ง swift เวอร์ชันเสถียรล่าสุดบน Ubuntu 18.04 และดูเหมือนว่า 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สำหรับ Linux ขอบคุณ!
คุณสามารถใช้มันได้แบบอินไลน์:
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-Click ที่ชื่อฟังก์ชัน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 ได้
แทนที่จะ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()วิธีการในโปรโตคอล FloatingPoint อีกครั้งทั้งสองFloatและDoubleสอดคล้องกับFloatingPointโปรโตคอล:
let x = 4.0
let y = x.squareRoot()
สำหรับฟังก์ชันตรีโกณมิติไลบรารีมาตรฐานไม่สามารถช่วยได้ดังนั้นคุณควรนำเข้าดาร์วินบนแพลตฟอร์มของ Apple หรือ Glibc บน Linux ข้ามนิ้วพวกเขาจะเป็นวิธีที่ดีกว่าในอนาคต
#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