26463


Swift2で、以下のようにPitchクラスからenumに変数を渡す（enumに引数を与える？）ようにしたいのですが、どのように書けば良いのでしょうか？  
もう少し具体的に言うと、View Controllerに置かれたPicker
Viewで値が選択される度に、以下のNote.swift内のfrequencyが再計算されるようにしたいと思っています。  
以下のコードは実際のコードから一部抜粋したものになります。

[code]

    // Pitch.swift
    class Pitch: CustomStringConvertible {
        var reference: Double // 変数referenceをNote.swiftのenumに渡したい
        let note: Note
        let frequency: Double
    
        private init(note: Note) {
            self.note      = note
            self.frequency = note.frequency
    }
    
    // Note.swift
    enum Note: CustomStringConvertible {
        case A
        case B
    
        var frequency: Double {
            // 今まではreferenceの部分が定数だったが変数にしたい
            return reference / 12.0
            // return 442.0 / 12.0
        }    
    }
    
[/code]


CC BY-SA 3.0
2016-06-04T09:25:53.473
25442
2016-06-05T04:48:37.140
2016-06-05T04:00:21.387
question
swift ios xcode swift2 xcode7
Swift2におけるenumへの変数の受け渡しについて


例えば、static変数を利用してみられたらいかがでしょうか。

[code]

    enum Note: CustomStringConvertible {
        case A
        case B
    
        static var reference: Double = 440
    
        var frequency: Double {
            return Note.reference / 12.0
        }
    
        //...(CustomStringConvertibleに必要な記述等)
    }
    
[/code]

ただし、static変数はアプリごとに1つしか値を保持することができませんから、`Note.reference`を書き換えると、アプリ中の全てのNote型の変数に影響を与えることになってしまいます。  
それではダメと言う場合は、enumではなくstructを使うなり、associated
valueの機能を使うなりする必要があるでしょう。`Note`型と`reference`をどう使いたいのか、もう少し上位のレベルでどう使うのかがわからないと、どのやり方が最適かを論じるのは難しいですね。

* * *

static変数の参照／更新を行う場合は、`型名.変数名`の形で使用します。

[code]

    Note.reference = 442
    
[/code]

という記述で(`Note`型が参照できる場所からなら)どこからでも更新できます。


CC BY-SA 3.0
2016-06-05T04:24:37.630
26463
2016-06-05T04:48:37.140
2016-06-05T04:48:37.140
13972
13972
25442
answer