Gameplaykit GKState,swift 具有两个参数的函数
Gameplaykit GKState, swift func with two parameters
我相信这对你来说是个简单的问题。
如何编写一个带有两个参数和一个 GKState 的函数?
更新
苹果使用
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?'
解决方案感谢@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")
感谢回复
在整个示例代码中,您都使用了 AnyClass,而您应该(可能)使用 AnyObject。 AnyClass 指的是 class 定义,而 AnyObject 是 class.
的实例
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?
如果您希望参数为 class,请使用 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
的子 class)作为第一个参数,而不是 class/subclass 本身。例如,
let pippo = Pippo()
printState (pippo, "Hello")
我相信这对你来说是个简单的问题。
如何编写一个带有两个参数和一个 GKState 的函数?
更新
苹果使用
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?'
解决方案感谢@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")
感谢回复
在整个示例代码中,您都使用了 AnyClass,而您应该(可能)使用 AnyObject。 AnyClass 指的是 class 定义,而 AnyObject 是 class.
的实例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?
如果您希望参数为 class,请使用 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
的子 class)作为第一个参数,而不是 class/subclass 本身。例如,
let pippo = Pippo()
printState (pippo, "Hello")