Получать 11 имеет смысл.
Подумайте об этом примере:
"ababa".components(separatedBy: "b")
Если вы разделите строку везде, где появляется «b», вы получите 3 строки, которые все » a ", поэтому вам нужно вычесть 1, чтобы получить нужный ответ: 2.
Это работает, даже если между тем, что вы ищете, нет других символов:
"bb".components(separatedBy: "b")
Приведенный выше код возвращает 3 пустых строки, поэтому вы все равно не можете взять число и вычесть 1, чтобы получить желаемое число.
Также см. аналогичный вопрос с соответствующими ответами: Количество вхождений подстроки в строку в Swift