Давайте попробуем подойти к этому систематически.Первой задачей было бы определить смещения первого и последнего символа «средней части».Если мы составим таблицу с некоторыми репрезентативными случаями
string result length first last
------------------------------------
a a 1 0 0
ab ab 2 0 1
abc b 3 1 1
abcd bc 4 1 2
abcde c 5 2 2
abcdef cd 6 2 3
, то получим, что
firstIndex = (length - 1) / 2
lastIndex = length / 2
, где /
- это усеченное целочисленное деление .Пустая строка должна обрабатываться отдельно.
Наконец, нам нужно знать, как работать с индексами и смещениями в строке Swift, что объясняется в Новая модель для коллекций и индексов .
Это приводит к реализации
func middle(_ str: String) -> String {
if str.isEmpty { return "" }
let len = str.count
let fromIdx = str.index(str.startIndex, offsetBy: (len - 1)/2)
let toIdx = str.index(str.startIndex, offsetBy: len/2)
return String(str[fromIdx...toIdx])
}