titleForHeaderInSection
не вызывается динамически, а только тогда, когда его нужно вызвать (один раз, чтобы показать данные изначально, а затем, когда заголовок снова появляется на экране во время прокрутки).
Если вы просто хотите чтобы обновить sh все, позвоните tableView.reloadData()
Если вам нужно сохранить прокрутку и не хотите анимацию перезагрузки, вы можете либо обмануть tableView, чтобы обновить sh после изменения заголовка, вызвав этот блок:
tableView.beginUpdates()
tableView.endUpdates()
Или вы также можете напрямую получить доступ к заголовку, который может когда-нибудь перестать работать:
tableView.headerView(forSection: indexPath.section)?.textLabel?.text = "Some text"
Возможно, вам потребуется поместить строку выше в блок над ним.