Dong
4 min readNov 4, 2022

#作業練習【ChaoCode】 Swift 基礎篇 17:Protocol & Generic 作業

題目來自於 : ChaoCode 頻道

  1. 為什麼 .isEmpty 會比 .count == 0 好?
.isEmpty 一定是一次比對就完成.count 可能還要 forLoop 慢慢數完

2. Sequence、Collection、BidirectionalCollection、RandomAccessCollection,他們的特性是什麼?

Sequence - 會呼叫下一個Collection - 透過 index 存取BidirectionalCollection - 可以雙向 LoopRandomAccessCollection - 可以透過 index ± Int 來獲取 其他可用的 index

3. Set<String> 和 Set<Int> 都是 Set,表示他們是同一種類型嗎?

< > 內的類型不一樣,所以不一樣

Notes:

Protocol 整理

Collection 相關 Protocol -

Generic - 泛型

String 的 Index 操作 -

let sentence = "野原新之助"print(sentence.first!)
// 輸出結果 -> 野
print(sentence[sentence.startIndex])
// 輸出結果 -> 野
print(sentence.last!)
// 輸出結果 -> 助
print(sentence[sentence.index(after: sentence.startIndex)])
// .startIndex (的後一個)
// 輸出結果 -> 原
print(sentence[sentence.index(before: sentence.endIndex)])
// .endIndex (的前一個)
// 輸出結果 -> 助
print(sentence[sentence.index(sentence.startIndex, offsetBy: 3)])
// 輸出結果 -> 之
print(sentence[sentence.index(sentence.startIndex,
offsetBy: 5,
limitedBy: sentence.index(before: sentence.endIndex)) ?? sentence.startIndex])
// 輸出結果 -> 野 (下面附註圖1)
// Error:print(sentence[sentence.endIndex])
print(sentence[sentence.endIndex - 1])
圖1

實作:

第一題:

第二題:

想法:

先取得 文字數量 -> 利用ForLoop 搭配 stringIndex 檢查頭尾的字

( 偏移量可以為負數) 、 (要注意 尾的寫法 endIndex 位置 )

因為預設為true 所以不一樣才做更動(不一樣就回傳 false)

----------------------

檢查 應該可以檢查一半就好(要考慮 奇、偶數)

執行次數可以減少 不過Code可能會變長