How to create a string with format?

后端 未结 12 1338
别跟我提以往
别跟我提以往 2020-11-30 18:13

I need to create a string with format which can convert int, long, double etc. types into string. Using Obj-C, I can do it via below way.

NSString *str = [NS         


        
12条回答
  •  难免孤独
    2020-11-30 19:14

    I know a lot's of time has passed since this publish, but I've fallen in a similar situation and create a simples class to simplify my life.

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

    The follow link send to the complete source code: https://gist.github.com/dedeexe/d9a43894081317e7c418b96d1d081b25

    This solution was base on this article: http://vojtastavik.com/2015/03/29/real-time-formatting-in-uitextfield-swift-basics/

提交回复
热议问题