Swift学習(七:列挙)
3592 ワード
1.列挙構文
複数のメンバー値をカンマで区切って同じ行に表示できます.
2.Switch文を使用して列挙を照合する
3.関連値
列挙を定義するときに、メンバー変数に関連する値を設定できます.
関連値はswitch文の一部として抽出できます.switchのcaseブランチコードでは、各関連値を定数(let接頭辞)として抽出するか、変数(var接頭辞)として使用できます.
列挙メンバーのすべての関連値が定数として抽出されたり、変数として抽出されたりする場合は、簡潔にするために、メンバー名の前にletまたはvarを1つだけマークできます.
4.元の値元の値の暗黙的な割り当て元の値が整数または文字列タイプの列挙を使用する場合、列挙メンバーごとに元の値を明示的に設定する必要はありません.swiftは自動的に値を割り当てます.整数を元の値として使用すると、暗黙的に付与された値は順次1ずつ増加し、最初の列挙メンバーが元の値を設定していない場合、その元の値が0 にアクセスできます.元の値を使用する初期化列挙例 注意、左右の値が一致する列挙メンバーを見つけることができるわけではありません.したがって、元の値コンストラクタは常に
5.再帰列挙
は、関連する値として1つ以上の列挙メンバーが使用する列挙タイプのインスタンスです.再帰列挙を使用すると、コンパイラは中間層を挿入し、列挙メンバーの前に
または
呼び出し:
再帰的な性質を持つデータ構造を操作するには、再帰関数を使用するのが直接的な方法です.たとえば、次の関数は算術式を評価します.
enum Some{
//
}
enum Someone{
case north
case south
case east
case west
}
複数のメンバー値をカンマで区切って同じ行に表示できます.
enum Some{
case north,south,east,west
}
:
var aa = Some.east
: var aa = .east
2.Switch文を使用して列挙を照合する
aa = .east
switch aa{
case .north:
print()
case .south:
print()
case .east:
print()
case .west:
print()
}
3.関連値
列挙を定義するときに、メンバー変数に関連する値を設定できます.
enum some{
case aa(Int,Int,Int,Int)
case bb(String)
}
:var cc = some.aa(1,2,3,4)
: var cc = .aa(1,2,3,4)
関連値はswitch文の一部として抽出できます.switchのcaseブランチコードでは、各関連値を定数(let接頭辞)として抽出するか、変数(var接頭辞)として使用できます.
switch cc{
case aa(let a,let b,let c,let d):
print(a,b,c,d)
case bb(let str)
print(str)
}
列挙メンバーのすべての関連値が定数として抽出されたり、変数として抽出されたりする場合は、簡潔にするために、メンバー名の前にletまたはvarを1つだけマークできます.
switch cc{
case let aa( a, b,c, d):
print(a,b,c,d)
case let bb( str)
print(str)
}
4.元の値
enum aa :Int{
case a = 1, b , c , d
}
String
の列挙メンバーの列挙値はそれ自体である.列挙メンバーのrawValue
プロパティを使用して、列挙メンバーの元の値let b = aa.b.rawVlaue //2
enum aa :Int{
case a = 1, b , c , d
}
let b = aa(rawValue:3)
//b aa, c
の列挙メンバーを返します.元の値コンストラクタは失敗可能なコンストラクタです.すべての元の値に対応する元の値があるわけではありません.ない場合はnilです.5.再帰列挙
は、関連する値として1つ以上の列挙メンバーが使用する列挙タイプのインスタンスです.再帰列挙を使用すると、コンパイラは中間層を挿入し、列挙メンバーの前に
indirect
を追加してメンバーが再帰可能であることを示すことができます. enum ArithmeticExpression {
case Number(Int)
indirect case Addition(ArithmeticExpression, ArithmeticExpression)
indirect case Multiplication(ArithmeticExpression, ArithmeticExpression)
}
または
indirect enum ArithmeticExpression {
case Number(Int)
case Addition(ArithmeticExpression, ArithmeticExpression)
case Multiplication(ArithmeticExpression, ArithmeticExpression)
}
呼び出し:
let five = ArithmeticExpression.Number(5)
let four = ArithmeticExpression.Number(4)
let sum = ArithmeticExpression.Addition(five, four)
let product = ArithmeticExpression.Multiplication(sum, ArithmeticExpression.Number(2))
再帰的な性質を持つデータ構造を操作するには、再帰関数を使用するのが直接的な方法です.たとえば、次の関数は算術式を評価します.
func evaluate(expression: ArithmeticExpression) -> Int {
switch expression {
case .Number(let value):
return value
case .Addition(let left, let right):
return evaluate(left) + evaluate(right)
case .Multiplication(let left, let right):
return evaluate(left) * evaluate(right)
}
}
print(evaluate(product))
// "18"