簡體   English   中英

Swift 中的字符串插值

[英]String interpolation in Swift

swift 中的函數采用 Swift 中的任何數字類型(Int、Double、Float、UInt 等)。 該函數將數字轉換為字符串

函數簽名如下:

func swiftNumbers <T : NumericType> (number : T) -> String {
    //body
}

NumericType是一個自定義協議,已添加到 Swift 中的數字類型中。

在函數體內,數字應轉換為字符串:

我使用以下

var stringFromNumber = "\(number)"

這不是那么優雅,加上:如果數字的絕對值嚴格低於 0.0001,它會給出:

"\(0.000099)" //"9.9e-05"

或者如果數字很大:

"\(999999999999999999.9999)" //"1e+18"

有沒有辦法解決這個字符串插值限制? (不使用 Objective-C)

PS:

NumberFormater也不起作用

import Foundation

let number : NSNumber = 9_999_999_999_999_997

let formatter = NumberFormatter()
formatter.minimumFractionDigits = 20
formatter.minimumIntegerDigits = 20
formatter.minimumSignificantDigits = 40

formatter.string(from: number) // "9999999999999996.000000000000000000000000"

let stringFromNumber = String(format: "%20.20f", number) // "0.00000000000000000000"

快速字符串插值

1)向字符串添加不同的類型

2) 表示字符串是由常量、變量、文字或表達式的混合創建的。

例子:

let length:Float = 3.14
var breadth = 10
var myString = "Area of a rectangle is length*breadth"
myString = "\(myString) i.e. = \(length)*\(breadth)"    

輸出:

3.14
10
Area of a rectangle is length*breadth
Area of a rectangle is length*breadth i.e. = 3.14*10

使用 Swift 字符串初始值設定項: String(format: <#String#>, arguments: <#[CVarArgType]#>)例如: let stringFromNumber = String(format: "%.2f", number)

字符串插值從 Swift 的早期就已經存在,但在Swift 5.0中,它進行了大規模的改革,使其更快、更強大。

let name = "Ashwinee Dhakde"
print("Hello, I'm \(name)")

使用 Swift 5.0 中新的字符串插值系統,我們可以擴展String.StringInterpolation來添加我們自己的自定義插值,如下所示:

extension String.StringInterpolation {
    mutating func appendInterpolation(_ value: Date) {
       let formatter = DateFormatter()
       formatter.dateStyle = .full

       let dateString = formatter.string(from: value)
       appendLiteral(dateString)
    }
}

用法: print("Today's date is \(Date()).")

我們甚至可以提供用戶定義的名稱來使用 String-Interpolation,讓我們通過一個例子來理解。

extension String.StringInterpolation {
    mutating func appendInterpolation(JSON JSONData: Data) {
        guard
            let JSONObject = try? JSONSerialization.jsonObject(with: JSONData, options: []),
            let jsonData = try? JSONSerialization.data(withJSONObject: JSONObject, options: .prettyPrinted) else {
            appendInterpolation("Invalid JSON data")
            return
        }
        appendInterpolation("\n\(String(decoding: jsonData, as: UTF8.self))")
    }
}


print("The JSON is \(JSON: jsonData)")

每當我們想在字符串插值語句中提供“JSON”時,它都會打印.prettyPrinted

是不是很酷!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM