我需要创建一个字符串的格式,可以转换Int, Int64,双精度等类型为字符串。使用Objective-C,我可以通过:

NSString *str = [NSString stringWithFormat:@"%d , %f, %ld, %@", INT_VALUE, FLOAT_VALUE, DOUBLE_VALUE, STRING_VALUE];

如何做同样的,但在Swift?


当前回答

我认为这可以帮助你:

import Foundation

let timeNow = time(nil)
let aStr = String(format: "%@%x", "timeNow in hex: ", timeNow)
print(aStr)

结果示例:

timeNow in hex: 5cdc9c8d

其他回答

简单的功能没有包含在Swift中,这是意料之中的,因为它包含在其他语言中,通常可以快速编码以便重用。为程序员创建一个包含所有这些重用代码的技巧包文件的专业提示。

从我的技巧包中,我们首先需要在缩进中使用字符串乘法。

@inlinable func * (string: String, scalar: Int) -> String {
    let array = [String](repeating: string, count: scalar)
    return array.joined(separator: "")
}

然后是添加逗号的代码。

extension Int {
    @inlinable var withCommas:String {
        var i = self
        var retValue:[String] = []
        while i >= 1000 {
            retValue.append(String(format:"%03d",i%1000))
            i /= 1000
        }
        retValue.append("\(i)")
        return retValue.reversed().joined(separator: ",")
    }

    @inlinable func withCommas(_ count:Int = 0) -> String {
        let retValue = self.withCommas
        let indentation = count - retValue.count
        let indent:String = indentation >= 0 ? " " * indentation : ""

        return indent + retValue
    }
}

我只是写了最后一个函数这样我就可以让列对齐。

@inlinable很棒,因为它采用小函数并减少它们的功能,从而运行得更快。

您可以使用变量版本,也可以使用函数版本来获得固定的列。长度设置小于所需列只会扩展字段。

现在你有一些纯粹的Swift,不依赖于一些旧的objective C例程的NSString。

由于字符串(格式:"%s"…)在运行时崩溃,下面的代码允许编写类似"hello".center(42);“世界”.alignLeft (42):

extension String {

    // note: symbol names match to nim std/strutils lib:

    func align (_ boxsz: UInt) -> String {
        self.withCString { String(format: "%\(boxsz)s", $0) }
    }

    func alignLeft (_ boxsz: UInt) -> String {
        self.withCString { String(format: "%-\(boxsz)s", $0) }
    }

    func center (_ boxsz: UInt) -> String {
        let n = self.count
        guard boxsz > n else { return self }
        let padding = boxsz - UInt(n)
        let R = padding / 2
        guard R > 0 else { return " " + self }
        let L = (padding%2 == 0) ? R : (R+1)
        return " ".withCString { String(format: "%\(L)s\(self)%\(R)s", $0,$0) }
    }

}

String(format:)的美妙之处在于,你可以保存一个格式化字符串,然后在很多地方重复使用。它也可以本地化到这个地方。在插值的情况下,你必须一遍又一遍地写。

成功尝试一下:

 var letters:NSString = "abcdefghijkl"
        var strRendom = NSMutableString.stringWithCapacity(strlength)
        for var i=0; i<strlength; i++ {
            let rndString = Int(arc4random() % 12)
            //let strlk = NSString(format: <#NSString#>, <#CVarArg[]#>)
            let strlk = NSString(format: "%c", letters.characterAtIndex(rndString))
            strRendom.appendString(String(strlk))
        }

首先阅读Swift语言的官方文档。

答案应该是

var str = "\(INT_VALUE) , \(FLOAT_VALUE) , \(DOUBLE_VALUE), \(STRING_VALUE)"
println(str)

在这里

1)任何浮点值默认为double

EX.
 var myVal = 5.2 // its double by default;

->如果你想显示浮点值,那么你需要显式地定义像a

 EX.
     var myVal:Float = 5.2 // now its float value;

这要清楚得多。