Tôi đang sử dụng __DATE__
và __TIME__
trong Mục tiêu-C để nhận ngày và giờ xây dựng ứng dụng của tôi. Tôi không thể tìm cách để lấy thông tin này trong Swift. Có thể không?Nhận ngày và giờ xây dựng trong Swift
Trả lời
Bạn có thể sử dụng #line
, #column
và #function
.
Original câu trả lời:
Tạo một file Objective-C mới trong dự án của bạn, và khi Xcode hỏi, nói có với tạo header cầu nối.
Trong file Objective-C mới này, bổ sung sau khi các .h
file:
NSString *compileDate();
NSString *compileTime();
Và trong .m
thực hiện các chức năng:
NSString *compileDate() {
return [NSString stringWithUTF8String:__DATE__];
}
NSString *compileTime() {
return [NSString stringWithUTF8String:__TIME__];
}
Bây giờ chuyển đến tiêu đề bridging và nhập khẩu các .h
chúng tôi tạo ra.
Bây giờ trở lại bất kỳ các tập tin Swift của bạn:
println(compileDate() + ", " + compileTime())
Tuyệt vời. Cảm ơn nhgrif. –
Như một lưu ý, rất tiếc là không có cách nào mà tôi biết sử dụng chính xác '__LINE__' hoặc' __FILE__' trong Swift. Cách tiếp cận tương tự này sẽ chỉ trả lại dòng/tệp của mã Objective-C, rõ ràng. – nhgrif
Thực ra, có một cách. Kiểm tra bài đăng này từ Apple: https://developer.apple.com/swift/blog/?id=15 –
Bạn có thể lấy ngày xây dựng và thời gian không quay trở lại mục tiêu-C. Khi ứng dụng được tạo, tệp Info.plist được đặt trong gói luôn được tạo từ gói trong dự án của bạn. Vì vậy, ngày tạo của tệp đó khớp với ngày và giờ xây dựng. Bạn luôn có thể đọc các tệp trong gói ứng dụng của bạn và nhận các thuộc tính của chúng. Vì vậy, bạn có thể nhận được từ ngày xây dựng trong Swift bằng cách truy cập tập tin Info.plist của nó thuộc tính:
var buildDate:NSDate
{
if let infoPath = NSBundle.mainBundle().pathForResource("Info.plist", ofType: nil),
let infoAttr = try? NSFileManager.defaultManager().attributesOfItemAtPath(infoPath),
let infoDate = infoAttr["NSFileCreationDate"] as? NSDate
{ return infoDate }
return NSDate()
}
Lưu ý: đây là bài mà tôi đã sử dụng các tiêu đề lấp khi tôi bước đầu có vấn đề này. Tôi tìm thấy giải pháp "Swiftier" kể từ đó vì vậy tôi nghĩ rằng tôi muốn chia sẻ nó để tham khảo trong tương lai.
[EDIT] đã thêm biến compileDate để nhận ngày biên dịch mới nhất ngay cả khi không thực hiện xây dựng đầy đủ. Điều này chỉ có ý nghĩa trong quá trình phát triển vì bạn sẽ phải thực hiện một bản dựng đầy đủ để phát hành ứng dụng trên kho ứng dụng nhưng nó vẫn có thể được sử dụng. Nó hoạt động theo cùng một cách nhưng sử dụng tệp được gộp có chứa mã thực tế thay vì tệp Info.plist.
var compileDate:Date
{
let bundleName = Bundle.main.infoDictionary!["CFBundleName"] as? String ?? "Info.plist"
if let infoPath = Bundle.main.path(forResource: bundleName, ofType: nil),
let infoAttr = try? FileManager.default.attributesOfItem(atPath: infoPath),
let infoDate = infoAttr[FileAttributeKey.creationDate] as? Date
{ return infoDate }
return Date()
}
Điều này không mang lại kết quả nhất quán với '__DATE__' kể từ khi bạn cập nhật thông tin ứng dụng của mình.plist sẽ vẫn giữ nguyên trong khi' __DATE__' được cập nhật đúng vào thời điểm cập nhật. –
Tôi phỏng đoán rằng OP đang tìm kiếm ngày và giờ xây dựng. Tôi không chắc chắn ý của bạn là "khi bạn cập nhật ứng dụng". Bạn đang xây dựng lại nó, điều này sẽ luôn thay đổi ngày tạo của info.plist hoặc bạn không xây dựng lại nó và ngày sẽ không thay đổi (như mong đợi). –
Vâng, tôi có nghĩa là xây dựng lại. Vấn đề là nếu bạn đi để xây dựng lại đơn giản thông qua Xcode nó sẽ xuất ra cùng một thời điểm như trước đây. Đi sản phẩm> Sạch sẽ buộc phải cập nhật Info.plist. Bạn có thể xác nhận điều đó không? –
- 1. Swift - Nhận ngày giờ địa phương
- 2. Python: nhận ngày giờ trong 01 giờ
- 3. Nhận ngày và giờ khác nhau theo ngày, giờ, phút và giây trong Android
- 4. Nhận ngày giờ từ năm, ngày trong năm và giờ trong SQL Server 2008 R2
- 5. cách lấy XCode để thêm ngày và giờ xây dựng vào tệp Info.plist
- 6. Php nhận số ngày và giờ còn lại từ ngày
- 7. Ngày và Ngày giờ
- 8. Chỉ nhận giờ/phút của ngày giờ
- 9. Ngày giờ, Ngày giờ? và LINQ
- 10. Biên dịch ngày và giờ
- 11. Tham gia Ngày và Giờ tới Ngày giờ trong C#
- 12. Nhận ngày hiện tại trong Swift 3?
- 13. Grails - Làm thế nào để tôi hiển thị phiên bản và xây dựng ngày/giờ trong ứng dụng của tôi
- 14. Xây phút và giờ
- 15. Nhận ngày và giờ hiện tại trên một giờ 24 giờ
- 16. Ngày giờ mới() và mặc định (Ngày giờ)
- 17. C++ MFC Nhận ngày và giờ hiện tại
- 18. nhận ngày và giờ biên dịch không có macro
- 19. mysql nhận phút giữa một ngày giờ và NOW()
- 20. Nhận giờ và phút (HH: MM) từ ngày
- 21. Nhận ngày xuất hiện tiếp theo của ngày và giờ trong javascript
- 22. Định dạng ngày và giờ
- 23. ExtJS ngày và múi giờ
- 24. Nhận Weekday từ ngày - Swift 3
- 25. Nhận ngày giờ NgàyOfWeek/dayOfMonth làm String
- 26. Kích thước ngày và giờ trong kho dữ liệu
- 27. Ngày và giờ trong Emacs Lisp
- 28. Biên dịch ngày và giờ trong FPGA
- 29. Tạo ngày giờ trong Rails bằng tháng, ngày và năm
- 30. Tôi làm cách nào để hiển thị số Bản dựng và/hoặc Ngày giờ của lần xây dựng cuối cùng trong ứng dụng của tôi?
Có rất nhiều điều bạn không thể nói trong Swift. Không phải vấn đề lớn. Sử dụng một lớp trợ giúp được viết trong Objective-C ... – matt