#swift #enums
#быстрый #перечисления
Вопрос:
У меня есть следующая настройка вложенного перечисления:
enum UserSettings:Equatable {
case emailSettings(EmailSettings), notificationSettings(NotificationSettings), socialSettings(SocialSettings), gameSettings(GameSettings)
enum EmailSettings:CaseIterable {
case enableEmails, allowPromotionalEmails
}
enum NotificationSettings:CaseIterable {
case enableAppNotifications, getNewFollowerNotifications, getTaggedInPostNotifications
}
enum SocialSettings:CaseIterable {
case allowChallengeInvites, allowCrewRequests, allowLeagueInvites, allowPostTagging, allowUsersToFollow, appearOffline, crewOnlyMessaging, matchesArePublic, profileIsPublic
}
enum GameSettings:CaseIterable {
case syncNewMatchesOnStartup
}
}
Я пытаюсь передать значение «UserSettings» в ячейку с cellForRowAt
помощью следующего кода:
let cell = settingsTableView.dequeueReusableCell(withIdentifier: "yesNoSettingsCell", for: indexPath) as! YesNoSettingsCell
let currentSetting = UserSettings.SocialSettings.allCases[indexPath.row]
cell.passedUserSetting = currentSetting
return cell
Приведенный выше код выдает следующую ошибку:
"Cannot assign value of type 'UserSettings.SocialSettings' to type 'UserSettings'"
Изменение кода в cellForRowAt
:
let currentSetting = UserSettings.socialSettings().allCases[indexPath.row]
выдает следующую ошибку:
"Missing argument for parameter #1 in call"
Что я упускаю из виду? Как мне перечислить все случаи вложенного перечисления?
Комментарии:
1.
let currentSetting = UserSettings.SocialSettings.allCases[indexPath.row]; cell.passedUserSetting = .socialSettings(currentSetting)
?2.
cell.passedUserSetting = UserSettings.socialSettings(currentSetting)
тогда? Обратите внимание, что в предыдущем не должно быть пробела.socialSettings (currentSetting)
=>.socialSettings(currentSetting)
, но я думаю, вы исправили эту опечатку3. Это сделало это! Спасибо! Убедитесь, что вы добавили ответ, чтобы я мог его принять.
Ответ №1:
Ошибка "Cannot assign value of type 'UserSettings.SocialSettings' to type 'UserSettings'"
включена cell.passedUserSetting = currentSetting
. Вы даете контекст, но passedUserSetting
это UserSettings
.
Но когда вы это сделаете:
let currentSetting = UserSettings.SocialSettings.allCases[indexPath.row]
Итак, это означает currentSetting
, что это a UserSettings.SocialSettings
.
Итак, вы пытаетесь установить значение типа B на ожидаемое значение типа A. Это не сработает.
Вы можете иметь при себе перечисление a UserSettings
с a UserSettings.SocialSettings
:
cell.passedUserSetting = .socialSettings(currentSetting)