2016-02-01 64 views
0

我敢肯定,這是對你一個簡單的問題。Gameplaykit GKState,迅速FUNC有兩個參數

怎麼能寫我有兩個參數,一個GKState一個FUNC?

UPDATE

蘋果使用 func willExitWithNextState(_ nextState: GKState)

如果我使用somefunc(state:GKState)作品精細

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?' 

SOLUTION感謝@ 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") 

感謝您的回覆

回答

0

如果你想有一個參數是一個類,使用Class.TypeAnyClass

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

,並使用Class.self作爲參數

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

更新

如果你r功能定義是

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") 
+0

謝謝我會在家裏嘗試。但爲什麼蘋果使用func willExitWithNextState(_ nextState:GKState)?爲什麼如果我使用somefunc(狀態:GKState)的作品,而somefunc(狀態:GKState,字符串:字符串)does not工作? –

+0

第一個解決方案就是我想要的!謝謝!不是第二個,因爲我必須檢查課程,而不是課程 –

+0

如果需要檢查對象的類型/類別(請參閱我更新的第二個解決方案),則可以使用'.dynamicType'。 – 0x141E

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? 
+0

我需要的類定義。我的代碼需要可選參數。我會更新一些代碼來更好地解釋 –