Ios 类型为'的值;字符串';没有成员';去掉元音';

Ios 类型为'的值;字符串';没有成员';去掉元音';,ios,swift,Ios,Swift,我正在尝试创建一种方法,可以删除给定句子中的任何元音。我创建了函数“Remove元音”,在我看来这是正确的。但是当我试图在给定的句子后调用该函数时,我得到了错误“类型'String'的值没有成员'removeVowels'” 由于将remove元音作为一个独立函数,因此需要使用函数语法调用它: print(removeVowels(sent:sent)) 您可以将其作为String类的扩展属性,在这种情况下,您需要使用不同的语法: extension String { var remo

我正在尝试创建一种方法,可以删除给定句子中的任何元音。我创建了函数“Remove元音”,在我看来这是正确的。但是当我试图在给定的句子后调用该函数时,我得到了错误“类型'String'的值没有成员'removeVowels'”


由于将
remove元音
作为一个独立函数,因此需要使用函数语法调用它:

print(removeVowels(sent:sent))
您可以将其作为
String
类的扩展属性,在这种情况下,您需要使用不同的语法:

extension String {
    var removeVowels {
        let vowels: [Character] = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"]
        let result = String(self.characters.filter{!vowels.contains($0)})
        return result
    }
}
此调用语法现在可以工作了:

print(sent.removeVowels)

编辑:您的实现是保留元音,而不是删除元音。

或者您必须调用该函数

print(removeVowels(sent: sent))

或者必须将函数声明为字符串扩展名和变量

extension String {

    var removeVowels : String {
        let vowels: [Character] = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"]
        let result = String(self.characters.filter{vowels.contains($0)})
        return result
    }
}
然后你可以打电话

print(sent.removeVowels)
顺便说一下,如果你真的想删除你必须过滤的元音
不包含
…过滤{!元音…


或者,您可以使用正则表达式

extension String {
    var removingVowels : String {
        return self.replacingOccurrences(of: "[aeiou]", with: "", options: [.caseInsensitive, .regularExpression])
    }
}

请注意,您的函数只删除元音。顺便说一句,非变异函数/方法的正确名称类似于
removingvouels()
我建议将其设置为方法,而不是计算属性。计算属性通常应为O(1)IMO应该感觉到实际上可以存储在实例本身上的东西;这里的情况也不是这样。而且,非变异名称应该是
removingvouels()
extension String {
    var removingVowels : String {
        return self.replacingOccurrences(of: "[aeiou]", with: "", options: [.caseInsensitive, .regularExpression])
    }
}