Как можно вернуть пустое значение для моего Enum - PullRequest
0 голосов
/ 14 мая 2018

Я установил Enum для своих типов поддержки, который объявлен так:

enum SupportType: String, Codable {
    case type1
    case type2
    case type3

    func string() -> String {
        switch self {
            case .type1:
                return "Type 1"
            case .type2:
                return "Type 2"
            case .type3:
                return "Type 3"
    }
}

Когда я добавляю в свой класс, я объявляю тип как

type: SupportType

Это все работает, когда значения передаются, но когда я пытаюсь отправить пустой новый тип, я попытался объявить его как

NewType(name: data.name, supportType: [SupportType(rawValue: "")], supportName: "")

Это выдает ошибку, говоря, что оно имеет пустое значение. Как я могу объявить новый тип, не используя одно из существующих значений типа?

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Смысл enum в том, что его можно создать только в одном из его предопределенных и неизменных случаев. Тип enum может принимать только те значения, которые определены в типе компиляции, вы не можете добавить к нему больше случаев после того, как тип был объявлен, и вы не можете изменить его существующие случаи.

Ваша функция string также не имеет смысла, вы должны просто перезаписать значение по умолчанию rawValue вашего enum, а затем получить доступ к свойству, к которому вы сейчас обращаетесь, используя string с rawValue.

enum SupportType: String, Codable {
    case type1 = "Type 1"
    case type2 = "Type 2"
    case type3 = "Type 3"
}

Если вы определяете свойство типа SupportType для другого типа, вы должны определить его как необязательное, а не пытаться создать «пустое значение» для SupportType. Вы также должны изменить свой пользовательский инициализатор так, чтобы он принимал необязательный входной аргумент для supportType.

class NewType {
    let name:String
    var supportType:SupportType?
    var supportName:String?

    init(name: String, supportType: SupportType? = nil, supportName: String? = nil){
        self.name = name
        self.supportType = supportType
        self.supportName = supportName
    }
}

Тогда назовите это как

NewType(name: data.name, supportType: nil, supportName: nil)
0 голосов
/ 14 мая 2018

Почему бы не использовать nil?

Сначала объявите вашу собственность как необязательную:

var type: SupportType?

И затем вы можете передать nil:

NewType(name: data.name, supportType: nil, supportName: "")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...