Лучшее место для экспериментов с такими вопросами - Детская площадка .Кроме того, ознакомьтесь с документацией .
. Теперь давайте рассмотрим каждый из операторов:
let openIdx = s.lastIndex(of: "(") // it will find the last index of "(", the return type here is Array.Index?
, так что если я напечатаю значение после с индексом, включающим до концастрока, это будет
print(s[openIdx!...]) // `!` exclamation is used for forced casting
// (ga)kjh
Теперь для вашего второго вопроса;
let closeIdx = s[openIdx...].firstIndex(of:")")!
Позвольте разбить его на части s[openIdx...]
равен (ga)kjh
на первой итерации и поэтому он вернет индекс )
после a
.
Предложение будетвсегда нарушайте утверждение и узнайте, что делает каждое выражение.