类型的值'字符串'没有会员' removeVowels'

时间:2017-08-13 08:50:52

标签: ios swift

我试图创建一个方法来删除给定句子中的任何元音。我创建了函数' removeVowels'在我看来似乎是正确的。但是当我尝试在给定的句子之后调用该函数时,我得到错误"类型的值'字符串'没有会员' removeVowels'"。

var sent: String = "This website is for losers LOL!"

func removeVowels(sent: String) -> String {
    let vowels: [Character] = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"]
    let result = String(sent.characters.filter{vowels.contains($0)})
    return result
}

print(sent.removeVowels)

2 个答案:

答案 0 :(得分:1)

由于您使removeVowels成为一个独立的函数,您需要使用函数语法调用它:

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)

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

答案 1 :(得分:1)

要么你必须调用函数

print(removeVowels(sent: sent))

或者你必须将函数声明为String扩展和变量

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)

顺便说一下,如果你真的想删除元音,你必须过滤 does not contain ...filter{!vowels...

或者你可以使用正则表达式

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