私は静的に型付けされた言語を使い慣れていて、適切な多重定義された関数を呼び出すために構造体を型にキャストすることが可能かどうか疑問に思っていましたか?私が取り組んでいる問題は、Mutation
プロトコルに準拠したStructsのリストです。私はリストを反復して、それぞれの構造体に対して正しいhandle
関数を呼びたいと思います。私は、構造体自体にこのhandle
機能を移動することもできますが、私が実装しようとしているAPIのために、私は以下のようにそのようなことが可能であるかどうかを確認したいと思います:あなたが好きなあなたのhandle()
の機能を組み合わせることができ異なる構造のオーバーロード関数同じプロトコルを実装していますか?
//: Playground - noun: a place where people can play
import UIKit
protocol Mutation {
func mutate(state: Int) -> Int
}
struct CountIncrement: Mutation {
func mutate(state: Int) -> Int {
return state + 1
}
}
struct CountDecrement: Mutation {
func mutate(state: Int) -> Int {
return state - 1
}
}
func handle(mutation: CountIncrement, state: Int) -> Int {
print("WILL INCREMENT")
return mutation.mutate(state: state)
}
func handle(mutation: CountDecrement, state: Int) -> Int {
print("WILL DECREMENT")
return mutation.mutate(state: state)
}
var state = 0
var queue = [CountIncrement(), CountDecrement()] as [Mutation]
for mutation in queue {
handle(mutation: mutation, state: state) // error: cannot invoke 'handle' with an argument list of type '(mutation: Mutation, state: Int)'
}