Tôi vừa tạo một dự án Swift mới trong Xcode. Tôi đang tự hỏi phiên bản Swift nào đang sử dụng.
Làm cách nào tôi có thể thấy, trong Xcode hoặc thiết bị đầu cuối, tôi đang sử dụng phiên bản Swift nào trong dự án của mình?
Tôi vừa tạo một dự án Swift mới trong Xcode. Tôi đang tự hỏi phiên bản Swift nào đang sử dụng.
Làm cách nào tôi có thể thấy, trong Xcode hoặc thiết bị đầu cuối, tôi đang sử dụng phiên bản Swift nào trong dự án của mình?
Câu trả lời:
Cài đặt xây dựng dự án có một khối 'Trình biên dịch Swift - Ngôn ngữ', lưu trữ thông tin về Phiên bản ngôn ngữ Swift ở định dạng khóa-giá trị. Nó sẽ hiển thị cho bạn tất cả Phiên bản ngôn ngữ Swift có sẵn (được hỗ trợ) cho Xcode của bạn và phiên bản hoạt động cũng bằng dấu tích.
Dự án ► (Chọn mục tiêu dự án của bạn) ► Cài đặt bản dựng ► (Nhập 'swift_version' trong thanh Tìm kiếm) Ngôn ngữ trình biên dịch Swift ► Phiên bản ngôn ngữ Swift ► Nhấp vào danh sách Ngôn ngữ để mở (và sẽ có dấu tích vào bất kỳ danh sách nào -item, đó sẽ là phiên bản nhanh chóng hiện tại).
Nhìn vào ảnh chụp này, để dễ hiểu:
Với sự trợ giúp của mã theo sau, theo lập trình, bạn có thể tìm thấy phiên bản Swift được hỗ trợ bởi dự án của bạn.
#if swift(>=5.2)
print("Hello, Swift 5.2")
#elseif swift(>=5.1)
print("Hello, Swift 5.1")
#elseif swift(>=5.0)
print("Hello, Swift 5.0")
#elseif swift(>=4.2)
print("Hello, Swift 4.2")
#elseif swift(>=4.1)
print("Hello, Swift 4.1")
#elseif swift(>=4.0)
print("Hello, Swift 4.0")
#elseif swift(>=3.2)
print("Hello, Swift 3.2")
#elseif swift(>=3.0)
print("Hello, Swift 3.0")
#elseif swift(>=2.2)
print("Hello, Swift 2.2")
#elseif swift(>=2.1)
print("Hello, Swift 2.1")
#elseif swift(>=2.0)
print("Hello, Swift 2.0")
#elseif swift(>=1.2)
print("Hello, Swift 1.2")
#elseif swift(>=1.1)
print("Hello, Swift 1.1")
#elseif swift(>=1.0)
print("Hello, Swift 1.0")
#endif
Đây là kết quả khi sử dụng Playground (với Xcode 11.x )
Những gì tôi làm là nói trong Terminal:
$ xcrun swift -version
Đầu ra cho Xcode 6.3.2 là:
Apple Swift version 1.2 (swiftlang-602.0.53.1 clang-602.0.53)
Tất nhiên, điều đó giả định rằng bạn xcrun
đang chỉ chính xác bản sao Xcode của mình. Nếu, giống như tôi, bạn đang tung hứng một số phiên bản Xcode, điều đó có thể gây lo lắng! Để chắc chắn rằng nó là, nói
$ xcrun --find swift
và nhìn vào đường dẫn đến Xcode mà nó hiển thị cho bạn. Ví dụ:
/Applications/Xcode.app/...
Nếu đó là Xcode của bạn, thì đầu ra từ -version
là chính xác. Nếu bạn cần bổ sung lại xcrun
, hãy sử dụng menu bật lên Công cụ dòng lệnh trong ngăn tùy chọn Vị trí của Xcode.
xcode-select -p
để in đường dẫn đến Xcode mà xcrun sẽ sử dụng và sudo xcode-select -s /path/to/Xcode.app
để thay đổi nó.
Từ Xcode 8.3 trở đi Build Settings
có khóa Swift Language Version
với giá trị phiên bản nhanh chóng mà mục tiêu của bạn đang sử dụng.
Đối với các Xcodes cũ hơn, hãy sử dụng giải pháp này, mở terminal và gõ lệnh sau (s)
Trường hợp 1: Bạn chỉ cài đặt một Ứng dụng Xcode
swift -version
Trường hợp 2: Bạn đã cài đặt nhiều Ứng dụng Xcode
Chuyển đổi active developer directory
(Thay thế Xcode_7.3.app
từ lệnh sau bằng tên tệp ứng dụng Xcode của bạn từ thư mục Ứng dụng mà bạn muốn kiểm tra phiên bản nhanh chóng)
sudo xcode-select --switch /Applications/Xcode_7.3.app/Contents/Developer
Sau đó
swift -version
LƯU Ý: Từ Xcode 8 đến Xcode 8.2.x, bạn có thể sử dụng swift 2.3 ngay cả khi Xcode 8 sử dụng swift 3.x làm phiên bản swift mặc định. Để sử dụng nhanh chóng 2.3, chỉ cần bật cờ Use Legacy Swift Language Version
để YES
từ Build Setting
và XCode sẽ sử dụng Swift 2.3 cho rằng mục tiêu của dự án.
Bạn có thể xem và chọn Xcode phiên bản Swift nào đang sử dụng trong:
Mục tiêu -> Cài đặt bản dựng -> Phiên bản ngôn ngữ Swift :
Điều này có sẵn trong Xcode 8.3 và Xcode 9 (chưa kiểm tra các phiên bản cũ hơn)
Swift Language Version
không xuất hiện như một cài đặt trong dự án Xcode 8.2.1 của tôi. Nó có Use Legacy Swift Language Version
.
Swift Language Version
đã không tồn tại ở đây Build Settings
cho đến khi Xcode 8.3 .... trong các phiên bản Xcode 8.x trước đó Use Legacy Swift Language Version
, No
= Swift 3 và Yes
= Swift 2.3
Bài đăng reddit này đã giúp tôi: https://www.reddit.com/r/swift/comments/4o8atc/xcode_8_which_swift/d4anpet
Xcode 8 sử dụng Swift 3.0 làm mặc định. Nhưng bạn có thể bật Swift 2.3. Chuyển đến Cài đặt bản dựng của dự án và đặt 'Sử dụng Phiên bản ngôn ngữ Swift kế thừa' thành CÓ.
Tốt cũ reddit :)
Để xem phiên bản mặc định của swift được cài đặt trên máy của bạn, sau đó từ dòng lệnh, nhập như sau:
swift --version
Apple Swift phiên bản 4.1.2 (swiftlang-902.0.54 clang-902.0.39.2)
Mục tiêu: x86_64-apple-darwin17.6.0
Đây rất có thể là phiên bản được bao gồm trong phiên bản Xcode của cửa hàng ứng dụng mà bạn đã cài đặt (trừ khi bạn đã thay đổi nó).
Nếu bạn muốn xác định phiên bản thực tế của Swift đang được sử dụng bởi một phiên bản Xcode cụ thể (ví dụ: phiên bản beta), sau đó từ dòng lệnh, hãy gọi tệp nhị phân nhanh trong gói Xcode và chuyển qua tham số - đảo ngược
/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift --version
Apple Swift phiên bản 4.2 (swiftlang-1000.0.16.7 clang-1000.10.25.3)
Mục tiêu: x86_64-apple-darwin17.6.0
/usr/bin/swiftc --version
Đóng góp tiền thưởng: Tôi đang sử dụng tập lệnh node.js tùy chỉnh để trích xuất một chuỗi sạch để sử dụng với tài liệu Jazzy. Bạn có thể sử dụng điều này nếu bạn có thể tìm một nơi để xử lý nó trong quy trình phát triển của mình:
Được viện dẫn từ tập lệnh Bash:
#!/bin/bash
swiftversion=$(node SwiftVerSlicer.js "${xcrun swift -version}");
echo $swiftversion
SwiftVerSlicer.js:
// begin script
const inputString = `${process.argv[2]}`
let searchTerm = (inputString.indexOf('(') - 1)//-1 cause whitespace
let version = inputString.slice(0,searchTerm)
console.log(version)
// end script
Tất nhiên bạn cũng có thể sử dụng regex, nhưng làm bất cứ điều gì bạn thích:]
Chỉ cần nhập lệnh swift trong thiết bị đầu cuối, nó sẽ hiển thị phiên bản, trong khi đăng nhập vào bảng điều khiển Swift. (Một cái gì đó như bên dưới)
System-IOSs-MacBook-Air:~ system$ swift
Welcome to Apple Swift version 5.1 (swiftlang-1100.0.270.13 clang-1100.0.33.7).
Type :help for assistance.