将 Objective-C 中的函数转换为 swift

Posted

技术标签:

【中文标题】将 Objective-C 中的函数转换为 swift【英文标题】:converting function in Objective-C to swift 【发布时间】:2016-11-07 00:52:50 【问题描述】:

我正在尝试删除 json 的未转义控制字符,我已经可以将其转换为字符串,但现在我正在尝试在 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)?

【问题讨论】:

var mutable = String = inputString 错误。 【参考方案1】:

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

【讨论】:

以上是关于将 Objective-C 中的函数转换为 swift的主要内容,如果未能解决你的问题,请参考以下文章

将 Java 转换为 Objective-C:异常处理

将objective-c块转换为Swift闭包

将方法从 Objective-C 转换为 Swift 时的区别

如何将此方法从 Objective-C 转换为 Swift?

将objective-c typedef转换为其等效的字符串

将objective-c面向块的api转换为android