2016-11-07 34 views
1

我試圖刪除一個json的非轉義控制字符,我已經可以將它轉換爲字符串,但現在我正在嘗試在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(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("") 
    } 
} 

完成緣故

Swift 3.0

extension String { 
    var removingControlCharacters: String { 
     return components(separatedBy: .controlCharacters).joined() 
    } 
}