вынуждает String иметь определенный тип структуры в func params в swift - PullRequest
0 голосов
/ 11 мая 2019

У меня очень простая настройка, которую я делаю в процессе обучения, но я не могу понять, как передать свойство struct в функцию, где свойство struct - это просто строка. Я знаю, что могу заставить func принимать строку в аргументах, но я хочу, чтобы она была обязательной опцией из моей структуры. Сначала я покажу код, который у меня есть сейчас, а затем, как я думаю, я хочу, чтобы он работал ...

class ViewController: UIViewController {
    struct Notification {
        struct Category {
            static let achievement = "achievement"
            static let reminder = "reminder"
        }
        struct Action {
            static let readLater = "readtLater"
            static let showDetails = "showDetails"
            static let cancel = "cancel"
        }
    }

    private func scheduleNotification(_ delay: Int, type: Notification.Category, title: String, message: String) {
        //setup notification here
    }

Проблема в том, что когда я пытаюсь вызвать его с определенным типом, например ...

scheduleNotification(10, .achievement, "Test", "Test message")

Это дает мне ошибку, говоря ..

Член 'достижение' в 'ViewController.Notification.Category' выдает результат типа String, но контекст ожидает 'ViewController.Notification.Category'

Можно ли заставить этот тип параметра String быть допустимым параметром в структуре Notification.Category? Я видел другие функции, в которых вы можете передать [. Что-то] в качестве параметра, поэтому я думаю, что это так, но я понятия не имею, как это сделать. Я не хочу просто использовать String в качестве аргумента, потому что тогда это может быть буквально что угодно, я хочу, чтобы это был допустимый параметр в структуре

1 Ответ

1 голос
/ 11 мая 2019

Я думаю, вы хотите использовать enum?

class ViewController: UIViewController {
    struct Notification {
        enum Category {
            case achievement
            case reminder
        }
        struct Action {
            static let readLater = "readtLater"
            static let showDetails = "showDetails"
            static let cancel = "cancel"
        }
    }

    private func scheduleNotification(_ delay: Int, type: Notification.Category, title: String, message: String) {
      //setup notification here
    }
}


  scheduleNotification(10, .achievement, "Test", "Test message")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...