2017-08-13 37 views
1

我試圖創建一個方法,將從給定的句子中刪除任何元音。我創建了「removeVowels」函數,這在我看來是正確的。但是當我在給定的句子後嘗試調用該函數時,出現錯誤「類型'字符串'的值沒有成員'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) 
+0

注意,你的功能可以去除一切** **,但元音。 –

+1

順便說一句,一個非變異函數/方法的專有名稱就像'removedVowels()' –

回答

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) 

編輯:您的實施是保留元音,而不是刪除它們。

+0

我建議使這個方法,而不是一個計算屬性。計算屬性通常應該是O(1),IMO應該感覺實際上已經存儲在實例本身中的東西;這裏的情況也不是這樣。另外,[如馬丁所說](https://stackoverflow.com/questions/45658672/value-of-type-string-has-no-member-removevowels#comment78275401_45658672),非變異名稱應爲'removedVowels() '。 – Hamish

1

要麼你必須調用函數

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) 

順便說一下,如果你真的想刪除元音你必須過濾does not contain...filter{!vowels...


另外,您可以使用正則表達式

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