Skip to content

Instantly share code, notes, and snippets.

@KentarouKanno
Last active May 19, 2018 06:20
Show Gist options
  • Save KentarouKanno/18eb1a67541ef5f589566911de1546b0 to your computer and use it in GitHub Desktop.
Save KentarouKanno/18eb1a67541ef5f589566911de1546b0 to your computer and use it in GitHub Desktop.
String + extension

String + extension

extension String {
    
    // 全角文字列を半角文字列に変換した文字列を取得
    public var halfwidthcaseString: String {
        let text:CFMutableString = NSMutableString(string: self) as CFMutableString
        CFStringTransform(text, nil, kCFStringTransformFullwidthHalfwidth, false)
        return text as String
    }
    
    // 半角文字列を全角文字列に変換した文字列を取得
    public var fullwidthcaseString: String {
        let text:CFMutableString = NSMutableString(string: self) as CFMutableString
        CFStringTransform(text, nil, kCFStringTransformFullwidthHalfwidth, true)
        return text as String
    }
    
    // カタカナをひらがなに変換した文字列を取得
    public var hiraganacaseString: String {
        let text:CFMutableString = NSMutableString(string: self) as CFMutableString
        CFStringTransform(text, nil, kCFStringTransformHiraganaKatakana, true)
        return text as String
    }
    
    // ひらがなをカタカナに変換した文字列を取得
    public var katakanacaseString: String {
        let text:CFMutableString = NSMutableString(string: self) as CFMutableString
        CFStringTransform(text, nil, kCFStringTransformHiraganaKatakana, false)
        return text as String
    }
}


var half = "ABC".halfwidthcaseString
half //=> "ABC"

var full = half.fullwidthcaseString
full //=> "ABC"

var kana = "カタカナ".hiraganacaseString
kana //=> "かたかな"

var katakana = kana.katakanacaseString
katakana //=> "カタカナ"

★ 文字列数を取得する

extension String {
    var length: Int {
        get { return self.characters.count }
    }
}

★ HTML → NSAttributedString変換

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var label: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        let str = "It is <span style=\"text-decoration: underline;\">the</span> <span style=\"text-decoration: underline;\">year-end</span> season, so there are some events, such as Christmas <span style=\"text-decoration: underline;\">and year</span>-end <span style=\"text-decoration: underline;\">parties</span>. Japanese people <span style=\"text-decoration: underline;\">become busiest at this time of</span> year. However, I don't like this season very much because <span style=\"text-decoration: underline;\">it's</span> cold and bustling."
        
        if let attribute = str.htmlAttributedString() {
            
            // 文字色を赤にする
            attribute.addAttribute(NSForegroundColorAttributeName, value: UIColor.red , range: NSMakeRange(0, (attribute.string as NSString).length))
            
            label.attributedText = attribute
        }
    }
}

extension String {
    func htmlAttributedString() -> NSMutableAttributedString? {
        guard let data = self.data(using: String.Encoding.utf16, allowLossyConversion: false) else { return nil }
        guard let html = try? NSMutableAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) else { return nil }
        return html
    }
}

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment