2016-09-23 59 views
1

在Swift中有一些類似的方法。他們看起來很相似,實際上他們的功能也很相似。它們是:爲什麼Swift需要這些類似的功能?這有點多餘嗎?

popFirst()popLast()dropFirst()dropLast()removeFirst()removeLast()

特別是popFirst()removeFirst(),根據Apple doc

FUNC popFirst()

刪除並返回集合的第一個元素。

FUNC removeFirst()

移除並返回集合的第一個元素。

他們的文檔描述是完全一樣的。其實我嘗試了很多(操場上的整個頁面),看看這些方法之間是否存在顯着差異。答案是還有一些很小差異之間一些方法有些方法是完全一樣的根據我的測試。上字符串陣列使用時

一些方法,popFirst()popLast()dropLast()dropFirst()是不同的。但根據我的測試,他們都可以被removeFirst()removeLast()取代(儘管存在一些細微差別)。

所以我的問題是爲什麼Swift必須保持這些類似的方法。這有點多餘嗎?

+0

您注意,「(儘管有一些微小的差異)。」這些差異究竟是不是具有不同方法的這一點?哪些是「完全一樣的?「popFirst()','removeFirst()'和'dropFirst()'都具有不同的行爲(事實上,不同的簽名,所以你不需要在Playground中測試,因爲它們明顯不同) –

+0

@RobNapier如果這些微小的差異是這些方法存在的價值,我會說「好,很好」。但是......我其實只是想更多地瞭解Swift的基本知識,我不認爲我的問題值得downVote。畢竟我在問題標題中使用問號,不像*「它是多餘的!」* –

回答

1

儘管蘋果並沒有很容易找到,但它確實提到pop返回nil爲空集合,並且remove在沒有任何要刪除的情況下會引發錯誤。

然而,你應該能夠從這些函數的簽名告訴相同的:

  • popFirst返回一個可選的,這意味着,你甚至可以從一個空的集合
  • removeFirst彈出第一個元素,另一方面,不是可選的。這樣的簽名意味着在無法返回值的狀態下調用此方法是錯誤的。

這可能是使用操場容易證實:

var test1 = Set<String>(["a", "b"]) 
let x1 = test1.popFirst() 
let y1 = test1.popFirst() 
let z1 = test1.popFirst()   // returns nil 
var test2 = Set<String>(["a", "b"]) 
let x2 = test2.removeFirst() 
let y2 = test2.removeFirst() 
let z2 = test2.removeFirst()   // Throws an error 
+0

僅供參考,文檔在「返回值」部分中提到了這一點。方法在Xcode中查看帶有完整文檔的「標題」 –

+0

@ThanhPham你是對的,當我點擊進入文檔時,我看到兩個效果都提到了,謝謝! – dasblinkenlight

+0

其實我通過*選項遍歷所有這些方法的文檔+點擊*或*命令+點擊*。我不是新的Swift,我只想知道是否有必要在Swift中保留所有這些方法。現在我知道,這些微小的差異對你們所有人來說都很重要。不管怎樣,謝謝你。 –