如何创build一个格式的string?

我需要创build一个可以将int,long,double等types转换为string的格式的string。 使用Obj-C,我可以通过下面的方法。

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

如何做到与swift相同?

我认为这可以帮助你:

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

没什么特别的

 let str = NSString(format:"%d , %f, %ld, %@", INT_VALUE, FLOAT_VALUE, DOUBLE_VALUE, STRING_VALUE) 
 let str = "\(INT_VALUE), \(FLOAT_VALUE), \(DOUBLE_VALUE), \(STRING_VALUE)" 

不需要NSString

 String(format: "Value: %3.2f\tResult: %3.2f", arguments: [2.7, 99.8]) 

要么

 String(format:"Value: %3.2f\tResult: %3.2f", 2.7, 99.8) 
 var str = "\(INT_VALUE) , \(FLOAT_VALUE) , \(DOUBLE_VALUE), \(STRING_VALUE)" 

我会争辩这两个

 let str = String(format:"%d, %f, %ld", INT_VALUE, FLOAT_VALUE, DOUBLE_VALUE) 

 let str = "\(INT_VALUE), \(FLOAT_VALUE), \(DOUBLE_VALUE)" 

都可以接受,因为用户询问格式,这两种情况都符合他们的要求:

我需要创build一个可以将int,long,double等types转换为string的格式的string。

显然,前者允许比后者更好地控制格式,但这并不意味着后者不是一个可接受的答案。

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

答案应该是

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

这里

1)任何浮点值默认为double

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

– >如果你想显示浮点值,那么你需要明确定义这样的一个

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

这更清楚。

我知道自发布以来已经有很多时间了,但我陷入了类似的情况,创造了一个简单的课程来简化我的生活。

 public struct StringMaskFormatter { public var pattern : String = "" public var replecementChar : Character = "*" public var allowNumbers : Bool = true public var allowText : Bool = false public init(pattern:String, replecementChar:Character="*", allowNumbers:Bool=true, allowText:Bool=true) { self.pattern = pattern self.replecementChar = replecementChar self.allowNumbers = allowNumbers self.allowText = allowText } private func prepareString(string:String) -> String { var charSet : NSCharacterSet! if allowText && allowNumbers { charSet = NSCharacterSet.alphanumericCharacterSet().invertedSet } else if allowText { charSet = NSCharacterSet.letterCharacterSet().invertedSet } else if allowNumbers { charSet = NSCharacterSet.decimalDigitCharacterSet().invertedSet } let result = string.componentsSeparatedByCharactersInSet(charSet) return result.joinWithSeparator("") } public func createFormattedStringFrom(text:String) -> String { var resultString = "" if text.characters.count > 0 && pattern.characters.count > 0 { var finalText = "" var stop = false let tempString = prepareString(text) var formatIndex = pattern.startIndex var tempIndex = tempString.startIndex while !stop { let formattingPatternRange = formatIndex ..< formatIndex.advancedBy(1) if pattern.substringWithRange(formattingPatternRange) != String(replecementChar) { finalText = finalText.stringByAppendingString(pattern.substringWithRange(formattingPatternRange)) } else if tempString.characters.count > 0 { let pureStringRange = tempIndex ..< tempIndex.advancedBy(1) finalText = finalText.stringByAppendingString(tempString.substringWithRange(pureStringRange)) tempIndex = tempIndex.advancedBy(1) } formatIndex = formatIndex.advancedBy(1) if formatIndex >= pattern.endIndex || tempIndex >= tempString.endIndex { stop = true } resultString = finalText } } return resultString } } 

下面的链接发送到完整的源代码: https : //gist.github.com/dedeexe/d9a43894081317e7c418b96d1d081b25

这个解决scheme是基于这篇文章: http : //vojtastavik.com/2015/03/29/real-time-formatting-in-uitextfield-swift-basics/

使用下面的代码:

  let intVal=56 let floatval:Double=56.897898 let doubleValue=89.0 let explicitDaouble:Double=89.56 let stringValue:"Hello" let stringValue="String:\(stringValue) Integer:\(intVal) Float:\(floatval) Double:\(doubleValue) ExplicitDouble:\(explicitDaouble) " 
 let INT_VALUE=80 let FLOAT_VALUE:Double= 80.9999 let doubleValue=65.0 let DOUBLE_VALUE:Double= 65.56 let STRING_VALUE="Hello" let str = NSString(format:"%d , %f, %ld, %@", INT_VALUE, FLOAT_VALUE, DOUBLE_VALUE, STRING_VALUE); println(str); 

如果你不能导入Foundation ,使用round()和/或不想要一个string ,我有一个简单的解决scheme,我学到了“We <3 Swift”

 var number = 31.726354765 var intNumber = Int(number * 1000.0) var roundedNumber = Double(intNumber) / 1000.0 

结果:31.726

成功尝试:

  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)) }