将扩展转换为类的功能

Kir*_*ill 0 ios swift swift3

我有扩展名将html符号转换为字符串:

extension String {
    func convertHtmlSymbols() throws -> String? {
        guard let data = data(using: .utf8) else { return nil }
        return try NSAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue], documentAttributes: nil).string
    }        
}
Run Code Online (Sandbox Code Playgroud)

这个扩展很好.但是我需要将此扩展转换为类"Converter"中的函数:

class Converter{

    func convertHtmlSymbols(data: String) throws -> String? {
        guard let data = data(using: .utf8) else { return nil }
        return try NSAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue], documentAttributes: nil).string
    }
}
Run Code Online (Sandbox Code Playgroud)

但我得到了这个错误:

错误:无法调用非函数类型的值

Mar*_*n R 5

String扩展方法中,

guard let data = data(using: .utf8) 
Run Code Online (Sandbox Code Playgroud)

是一个快捷方式

guard let data = self.data(using: .utf8) 
Run Code Online (Sandbox Code Playgroud)

data(using:)调用该方法self.在你的类中,你想在给定的字符串参数(也恰好称为"数据")上调用它,因此它必须是

guard let data = data.data(using: .utf8)
Run Code Online (Sandbox Code Playgroud)

重命名参数可以减少混乱!