형식으로 문자열을 만드는 방법은 무엇입니까?


187

int, long, double 등의 유형을 문자열로 변환 할 수있는 형식의 문자열을 만들어야합니다. Obj-C를 사용하여 아래 방법으로 할 수 있습니다.

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

스위프트와 동일한 작업을 수행하는 방법은 무엇입니까?

답변:


386

나는 이것이 당신을 도울 수 있다고 생각합니다.

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

결과 예 :

timeNow in hex: 5cdc9c8d

1
좋은 답변입니다! 이것은 절대적으로 올바른 방법입니다. 다른 경우에는 클래스 메소드 "stringWithFormat"이 클래스에서 "WithFormat"을 "format :"의 첫 번째 인수로 바꾼 초기화 호출로 변환됩니다. 원래 질문에는 표시 할 부동 소수점 소수점 이하 자릿수 변경과 같은 특정 형식이 추가되지 않았습니다.
David H

4
설명서에 연결 하시겠습니까? 추적하는 데 문제가 있습니다.
dumbledad

3
이 방법은에서오고 NSString있는 Foundation프레임 워크 . 따라서 import Foundation제대로 작동하려면이 작업을 수행해야합니다. 그렇지 않으면 표현식이을 호출 String.init<T>(T)하고 "(\"%@%x %x\", 10)"대신 비슷한 것을 생성합니다 .
eonil

1
@realityone %@%x기호는 무엇을 의미합니까? 더 자세히 배울 수있는 자료를 알려 주시겠습니까?
bibscy


90

특별한 것은 없다

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

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

업데이트 : Swift가 String(format:)API에 추가 하기 전에이 답변을 썼습니다 . 최고 답변에서 제공 한 방법을 사용하십시오 .


6
나는 이것이 형식이 없기 때문에 이것이 실제로 질문에 대답하지 않는다고 생각합니다. 이 방법을 사용하면 부동 소수점에 몇 개의 소수점 이하 자릿수를 지정할 수 없습니다. 사용하기 String(format:arguments:)더 적합 할 것입니다 것은 포맷 추가
크리스

4
OP는 형식을 요구하지 않았으며 int, long, double 등 유형을 string으로 변환 할 수있는 형식의 문자열만드는 방법 입니다.
존 에스트로 피아

그때의 문제는 불분명합니다. 그가 원하는 것을 비교하고 있기 때문에 -stringWithFormat:형식을 지정할 수 있습니다. 스위프트에서는 String(format:arguments:)Obj-C의 스위프트 버전이 될 것입니다-stringWithFormat:
Chris

질문 날짜를 확인하십시오. 이것은 Swift에서 NSString메소드가 아직 구현되지 않은 Swift의 첫 번째 릴리스 중이었습니다 String.
존 에스트로 피아

나는 정정되었다. 앞으로도 같은 문제를 찾는 모든 사람에게 새로운 방식을 공개하는 것이 좋습니다
Chris

42

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)

15

나는 둘 다 주장

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

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

사용자가 형식에 대해 물었으므로 두 가지 경우 모두 허용되며 두 경우 모두 요구 사항에 적합합니다.

int, long, double 등의 유형을 문자열로 변환 할 수있는 형식의 문자열을 만들어야합니다.

분명히 전자는 후자보다 형식을 더 세밀하게 제어 할 수 있지만 후자가 허용되는 대답이 아니라는 것을 의미하지는 않습니다.


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

5

먼저 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;

이것은 훨씬 더 분명하다.


2
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
수정자를 사용할 필요가 없습니다. 수정 자없이 사용할 수도 있습니다. 긴 코드이지만 맞습니다.
Gaurav Gilani

1

나는이 출판 이후 많은 시간이 지났다는 것을 알고 있지만, 비슷한 상황에 빠졌고 내 인생을 단순화하기 위해 간단한 수업을 만들었습니다.

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

이 솔루션은이 기사를 기반으로합니다 : http://vojtastavik.com/2015/03/29/real-time-formatting-in-uitextfield-swift-basics/


1

Foundation을 가져올 수없고 round ()을 사용 하거나 String을 원하지 않는 경우 "We <3 Swift"를 사용하여 얻은 간단한 솔루션이 있습니다 .

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

결과 : 31.726


0

다음 코드를 사용하십시오.

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

-2

시도 성공 :

 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))
        }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.