Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何创建具有格式的字符串?_Ios_Swift_Ios8 - Fatal编程技术网

Ios 如何创建具有格式的字符串?

Ios 如何创建具有格式的字符串?,ios,swift,ios8,Ios,Swift,Ios8,我需要创建一个字符串,其格式可以将int、long、double等类型转换为字符串。使用Obj-C,我可以通过下面的方法来完成 NSString *str = [NSString stringWithFormat:@"%d , %f, %ld, %@", INT_VALUE, FLOAT_VALUE, DOUBLE_VALUE, STRING_VALUE]; 如何使用swift?没什么特别的 let str = NSString(format:"%d , %f, %ld, %@", INT_V

我需要创建一个字符串,其格式可以将int、long、double等类型转换为字符串。使用Obj-C,我可以通过下面的方法来完成

NSString *str = [NSString stringWithFormat:@"%d , %f, %ld, %@", INT_VALUE, FLOAT_VALUE, DOUBLE_VALUE, STRING_VALUE];
如何使用swift?没什么特别的

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

更新:在Swift将
字符串(格式:)
添加到其API之前,我写了这个答案。使用。

提供的方法使用以下代码:

    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) "
初读

答案应该是

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;

这要清楚得多。

我认为这可以帮助您:

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);
let timeNow = time(nil)
let aStr = String(format: "%@%x", "timeNow in hex: ", timeNow)
print(aStr)
示例结果:

timeNow in hex: 5cdc9c8d
尝试成功:

 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))
        }
var字母:NSString=“abcdefghijkl”
var strRendom=NSMutableString.stringWithCapacity(strlength)

对于var i=0;i无
NSString
必填项

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


我认为两者都是

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

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

我需要创建一个字符串,其格式可以将int、long、double等类型转换为字符串


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

我知道自本次发布以来已经过了很多时间,但我也遇到了类似的情况,创建了一个simples类来简化我的生活

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
    }

}
公共结构StringMaskFormatter{
公共变量模式:String=“”
public var replecementChar:Character=“*”
公共变量allowNumbers:Bool=true
公共变量allowText:Bool=false
public init(模式:String,replecementChar:Character=“*”,allowNumbers:Bool=true,allowText:Bool=true)
{
self.pattern=模式
self.replecementChar=replecementChar
self.allowNumbers=allowNumbers
self.allowText=allowText
}
private func prepareString(string:string)->string{
var字符集:NSCharacterSet!
如果allowText&&AllowNumber{
charSet=NSCharacterSet.alphanumericCharacterSet().InversedSet
}
如果允许,则为else{
charSet=NSCharacterSet.letterCharacterSet().InversedSet
}
否则,如果AllowNumber{
charSet=NSCharacterSet.decimalDigitCharacterSet().InversedSet
}
让结果=string.componentsSeparatedByCharactersInSet(charSet)
返回结果。joinWithSeparator(“”)
}
public func createFormattedStringFrom(文本:String)->String
{
var resultString=“”
如果text.characters.count>0&&pattern.characters.count>0
{
var finalText=“”
var停止=错误
让tempString=prepareString(文本)
var formatIndex=pattern.startIndex
var tempIndex=tempString.startIndex
等一下!停
{
让formattingPatternRange=formatIndex..0,则为else{
设pureStringRange=tempIndex..=pattern.endIndex | | tempIndex>=tempString.endIndex{
停止=正确
}
resultString=finalText
}
}
返回结果字符串
}
}
以下链接将发送到完整的源代码:

此解决方案基于本文:

我从“我们字符串之美(格式:)中学到了一个简单的解决方案您可以保存一个格式化字符串,然后在十几个地方重复使用它。它也可以在这个地方进行本地化。对于插值方法,您必须反复编写它。

简单功能不包括在Swift中,因为它包含在其他语言中,所以通常可以快速编码Pro提示程序员创建一个包含所有这些重用代码的技巧包文件

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

@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
    }
}
我刚刚编写了最后一个函数,这样我可以让列对齐

@inlineable非常好,因为它占用了一些小功能,并减少了它们的功能,所以它们运行得更快

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


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

不需要使用修饰符。我们也可以在没有修饰符的情况下使用它。这是正确的,但是代码很长。回答得很好!这绝对是正确的方法。对于其他人,请注意类方法“stringWithFormat”将“WithFormat”转换为“format:”的命名第一个参数的类上的初始化调用。原来的问题没有添加任何特定的格式,比如更改要显示的浮点小数的数量,如果他有,你的答案将是唯一的!你能链接到文档吗?我很难找到它。此方法来自。因此,您必须
导入基础
,才能使其正常工作。否则表达式将调用
Stri
let str = "\(INT_VALUE), \(FLOAT_VALUE), \(DOUBLE_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
    }

}
var number = 31.726354765
var intNumber = Int(number * 1000.0)
var roundedNumber = Double(intNumber) / 1000.0
@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
    }
}