0

それはあなたにとって簡単な質問だと思います。

1 つの GKState で 2 つのパラメーターを持つ func を作成するにはどうすればよいですか?

アップデート

アップル使用 func willExitWithNextState(_ nextState: GKState)

私が使用する場合は正常にsomefunc(state:GKState) 動作します

whileは機能しsomefunc(state:GKState, string:String) ません、なぜですか???

その他の例

私はこれを試しました:

class Pippo:GKState {}

//1
func printState (state: GKState?) {
    print(state)
}

printState(Pippo) //Error cannot convert value of type '(Pippo).Type' (aka 'Pippo.Type') to expected argument type 'GKState?'

//2
func printStateAny (state: AnyClass?) {
    print(state)
}
printStateAny(Pippo) //NO Error


//3
func printStateGeneral <T>(state: T?) {
    print(state)
}
printStateGeneral(Pippo) //No Error

//4
func printStateAnyAndString (state: AnyClass?, string:String) {
    print(state)
    print(string)
}

printStateAnyAndString(Pippo/*ExpectedName Or costructor*/, string: "Hello") //ERROR
printStateAnyAndString(Pippo()/*ExpectedName Or costructor*/, string: "Hello") //ERROR cannot convert value of type 'Pippo' to expected argument type 'AnyClass?'

ソリューションありがとう @ 0x141E

func printStateAnyAndString (state: GKState.Type, string:String) {
    switch state {
    case is Pippo.Type:
        print("pippo")
    default:
        print(string)
    }
}

printStateAnyAndString(Pippo.self, string: "Not Pippo")

返信ありがとう

4

2 に答える 2

0

パラメータをクラスにする場合は、Class.Typeまたはを使用しますAnyClass

func printState (state: AnyClass, string:String) {
    print(state)
    print(string)
}

Class.self引数として使用します

printState(Pippo.self, string:"hello pippo")

アップデート

関数定義が

func printState (state:GKState, string:String) {
    if state.isValidNextState(state.dynamicType) {
        print("\(state.dynamicType) is valid")
    }
    print(state)
    print(string)
}

クラス/サブクラス自体ではなく、のインスタンスGKState(または のサブクラス) を最初の引数として渡す必要があります。GKState例えば、

let pippo = Pippo()

printState (pippo, "Hello")
于 2016-02-03T07:04:15.653 に答える
0

サンプル コード全体で AnyClass を使用していますが、(おそらく) AnyObject を使用する必要があります。AnyClass はクラス定義を参照しますが、AnyObject はクラスのインスタンスです。

class MyClass { }

func myFunc1(class: AnyClass)
func myFunc2(object: AnyObject)

let myObject = MyClass() // create instance of class

myFunc1(MyClass)         // myFunc1 is called with a class
myFunc2(myObject)        // myFunc2 is called with an instance

また、ほとんどのパラメーターを「?」でオプションにしましたが、必須ではないようです。例えば:

printState(nil) // What should this do?
于 2016-02-01T22:56:47.673 に答える