将 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的主要内容,如果未能解决你的问题,请参考以下文章
将方法从 Objective-C 转换为 Swift 时的区别
如何将此方法从 Objective-C 转换为 Swift?