сложный тип в быстром - PullRequest
       37

сложный тип в быстром

0 голосов
/ 13 декабря 2018

Я пытаюсь создать тип сложности, который может принимать 3 состояния: легкое, среднее или сложное.Тогда «минимальные» и «максимальные» значения будут установлены автоматически и достижимы, например «myDifficultyInstance.min» или что.

Я пробовал это, но не работает, я получаю ошибки:

enum Difficulty {
   case easy(min: 50, max: 200)
   case medium(min: 200, max: 500)
   case hard(min: 500, max: 1000)
}

Затем я попытался использовать структуру, но она становится слишком странной и уродливой.

Есть ли простое решение для этого?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Я знаю, что вы уже приняли ответ, но если вы хотите иметь как предустановленные, так и настраиваемые настройки сложности, я бы предложил сделать это так:

enum Difficulty {
   case easy
   case medium
   case hard
   case custom(min: Int, max: Int)

   var min : Int {
       switch self {
       case .easy:
           return 50
       case .medium:
           return 200
       case .hard:
           return 500
       case .custom(let min,_):
           return min
       }
   }

   var max : Int {
       switch self {
       case .easy:
           return 200
       case .medium:
           return 500
       case .hard:
           return 1000
       case .custom(_,let max):
           return max
       }
   }
}

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

Использование:

let difficulty : Difficulty = .easy
let customDifficulty : Difficulty = .custom(min: 70, max: 240)

let easyMin = difficulty.min
let easyMax = difficulty.max

let customMin = customDifficulty.min
let customMax = customDifficulty.max
0 голосов
/ 13 декабря 2018

Аргументы по умолчанию недопустимы в перечисляемых случаях

Когда вы определяете случаи enum, вы не можете определить значения по умолчанию.Представьте себе, что вы просто создаете «шаблоны».

Но вы можете сделать так, чтобы вы могли создавать случаи по умолчанию, создавая статические константы

enum Difficulty {
    case easy(min: Int, max: Int)
    case medium(min: Int, max: Int)
    case hard(min: Int, max: Int)

    static let defaultEasy = easy(min: 50, max: 200)
    static let defaultMedium = medium(min: 200, max: 500)
    static let defaultHard = hard(min: 500, max: 1000)
}

, затем вы можете использовать их какэто

Difficulty.defaultEasy
Difficulty.defaultMedium
Difficulty.defaultHard

Также я думаю, что для вашего случая, когда вам нужно получить значение min или max , было бы лучше, если бы вы использовали пользовательскиймодель данных

struct Difficulty {

    var min: Int
    var max: Int

    static let easy = Difficulty(min: 50, max: 200)
    static let medium = Difficulty(min: 200, max: 500)
    static let hard = Difficulty(min: 500, max: 1000) 
}
...