web-dev-qa-db-fra.com

Comment créer une chaîne au format?

J'ai besoin de créer une chaîne avec un format capable de convertir les types int, long, double, etc. en chaîne. En utilisant Obj-C, je peux le faire via la méthode ci-dessous.

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

Comment faire la même chose avec rapide?

169
Apurv

Je pense que cela pourrait vous aider:

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

Exemple de résultat:

timeNow in hex: 5cdc9c8d
357
realityone

rien de spécial

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

Mise à jour: J'ai écrit cette réponse avant Swift avait String(format:) ajouté à son API. Utilisez la méthode donnée par le réponse du haut .

40
John Estropia

Non NSString requis!

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

ou

String(format:"Value: %3.2f\tResult: %3.2f", 2.7, 99.8)
35
Durul Dalkanat

Je dirais que les deux

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

et

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

sont tous deux acceptables, car l'utilisateur a posé des questions sur le formatage et les deux cas correspondent à ce qu'il demande:

J'ai besoin de créer une chaîne avec un format capable de convertir les types int, long, double, etc. en chaîne.

Évidemment, le premier permet un contrôle plus fin du formatage que le dernier, mais cela ne signifie pas que le dernier n’est pas une réponse acceptable.

14
Lance Clark
var str = "\(INT_VALUE) , \(FLOAT_VALUE) , \(DOUBLE_VALUE), \(STRING_VALUE)"
5
Apple

Première lecture Documentation officielle pour Swift langue.

La réponse devrait être

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

Ici

1) Toute valeur en virgule flottante par défaut double

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

-> Si vous voulez afficher une valeur en virgule flottante, vous devez définir explicitement une telle

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

C'est beaucoup plus clair.

5
iPatel
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);
2
Awais Chatha

Il existe une solution simple que j'ai apprise avec "Nous <3 Swift" si vous ne pouvez ni importer Foundation, utilisez round () et/ou ne voulez pas de - String:

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

résultat: 31.726

1

Je sais que beaucoup de temps a passé depuis cette publication, mais je suis tombé dans une situation similaire et j'ai créé un cours simple pour me simplifier la vie.

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
    }

}

Le lien suivant envoie au code source complet: https://Gist.github.com/dedeexe/d9a43894081317e7c418b96d1d081b25

Cette solution était basée sur cet article: http://vojtastavik.com/2015/03/29/real-time-formatting-in-uitextfield-Swift-basics/

1
dede.exe

Utilisez ce code suivant:

    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) "
0
PREMKUMAR