2016-11-07 6 views
1

jsonのエスケープされていないコントロール文字を削除しようとしていますが、すでにStringに変換できましたが、Objective-Cでこの関数をswiftに適用しようとしています。Objective-Cの関数をswiftに変換する

- (NSString *)stringByRemovingControlCharacters: (NSString *)inputString 
{ 
NSCharacterSet *controlChars = [NSCharacterSet controlCharacterSet]; 
NSRange range = [inputString rangeOfCharacterFromSet:controlChars]; 
if (range.location != NSNotFound) { 
    NSMutableString *mutable = [NSMutableString stringWithString:inputString]; 
    while (range.location != NSNotFound) { 
     [mutable deleteCharactersInRange:range]; 
     range = [mutable rangeOfCharacterFromSet:controlChars]; 
    } 
    return mutable; 
} 
return inputString; 
} 

参照としてこれを次のとおりです。Unescaped control characters in NSJSONSerialization

私はそれを得たが、動作しません:

func stringByRemovingControlCharacters(inputString: String) -> String { 
var controlChars = NSCharacterSet.controlCharacterSet<NSObject>() 
var range = inputString.rangeOfCharacterFromSet<NSObject>(controlChars) 
if range.location != NSNotFound { 
    var mutable = String = inputString 
    while range.location != NSNotFound { 
     mutable.deleteCharactersInRange(range) 
     range = mutable.rangeOfCharacterFromSet<NSObject>(controlChars) 
    } 
    return mutable 
} 
return inputString 
} 

明示的に一般的な機能に特化することはできません

の不変式に割り当てることができませんタイプ 'String.Type'

スウィフト(Swift 2.3)にはどのように適切に適応できますか?

+0

var mutable = String = inputStringが間違っています。 – gnasher729

答えて

4

Objective-Cの翻訳(非慣用)

あなたが提供したコードを取得することができ、最も近いは以下の通りです:

func stringByRemovingControlCharacters(string: String) -> String { 
    let controlChars = NSCharacterSet.controlCharacterSet() 
    var range = string.rangeOfCharacterFromSet(controlChars) 
    var mutable = string 
    while let removeRange = range { 
     mutable.removeRange(removeRange) 
     range = mutable.rangeOfCharacterFromSet(controlChars) 
    } 

    return mutable 
} 

けれども私は、あなたが上記のコードを使用することはお勧めしません。

スウィフト2.3

あなたはこのような、よりSwifty方法でそれを書くことができます。

func stringByRemovingControlCharacters(string: String) -> String { 
    return string.componentsSeparatedByCharactersInSet(.controlCharacterSet()) 
       .joinWithSeparator("") 
} 

あるいは拡張として:

extension String { 
    func stringByRemovingControlCharacters() -> String { 
     return componentsSeparatedByCharactersInSet(.controlCharacterSet()) 
        .joinWithSeparator("") 
    } 
} 

完了便宜上:

スウィフト3.0

extension String { 
    var removingControlCharacters: String { 
     return components(separatedBy: .controlCharacters).joined() 
    } 
} 
関連する問題