Перечислите функцию и вычтите старое значение с новым значением на swift - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь подсчитать, насколько полутоны музыкальных нот изменились с помощью функции перечисления в Swift, но я не знаю, как ее применить. Вот что я сделал:

enum TonalityChange: String{
    case C = "1/2"
    case Csharp = "1"
    case D = "1(1/2)"
    case Dsharp = "2"
    case E = "2(1/2)"
    case F = "3"
    case Fsharp = "3(1/2)"
    case G = "4"
    case Gsharp = "4(1/2)"
    case A = "5"
    case Asharp = "5(1/2)"
    case B = "6"
}

Тогда я объявляю переменную для перечисления:

var OldTonality : B
var NewTonality : C

var Difference : //This will do the subtraction result

Затем я должен вычесть оба значения, чтобы получить натуральное число, которое сообщит мне об изменении, например:

6 - (1/2) = 5(1/2)

Наконец, я хочу сделать предупреждение, которое будет выглядеть так:

"Great! Tonality changed by \(Difference) tones!"

or "Great! Tonality changed by (1/2) tones!"

Но я весь день думал о том, как сделать эту логику.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Попробуйте это

enum TonalityChange: Float {
    case C = 0.5
    case Csharp = 1.0
    case D = 1.5
    case Dsharp = 2.0
    case E = 2.5
    case F = 3.0
    case Fsharp = 3.5
    case G = 4.0
    case Gsharp = 4.5
    case A = 5.0
    case Asharp = 5.5
    case B = 6.0

    var formatedString : String {
        switch self {
            case .C : return "1/2"
            case .Csharp : return "1"
            case .D :  return "1(1/2)"
            case .Dsharp : return "2"
            case .E : return "2(1/2)"
            case .F : return "3"
            case .Fsharp : return "3(1/2)"
            case .G : return "4"
            case .Gsharp : return "4(1/2)"
            case .A : return "5"
            case .Asharp : return "5(1/2)"
            case .B : return "6"
        }
    }
}

let difference = TonalityChange.B.rawValue - TonalityChange.C.rawValue
let newValue = TonalityChange(rawValue :difference)
print(newValue!.formatedString)
0 голосов
/ 06 сентября 2018

Сделать TonalityChange плавающим вместо строки:

enum TonalityChange: Float {
    case C = 0.5
    case Csharp = 1
    case D = 1.5
    case Dsharp = 2
    case E = 2.5
    case F = 3
    case Fsharp = 3.5
    case G = 4
    case Gsharp = 4.5
    case A = 5
    case Asharp = 5.5
    case B = 6
}

Теперь вы можете делать различия.

let diff = TonalityChange.B.rawValue - TonalityChange.C.rawValue
...