In the code below, I'm trying to store a reference to a function with any number of arguments, with any return type. And I want to be able to invoke it.
Help? See the comments with "*******" typealias Void = () func equalTypes(_ me: [Any.Type], _ other: [Any.Type]) -> Bool { guard me.count == other.count else { return false } for i in 0 ..< me.count { if me[i] != other[i] { return false } } return true } struct Function { var returnType: Any.Type var argTypes: [Any.Type] var function: Any // ******* any function ******* func perform(_ args: [Any]) -> Any { // ******* call function() with args, return result ******* return 0 } func isCompatible(_ other: Function) -> Bool { return self.returnType == other.returnType && equalTypes(argTypes, other.argTypes) } } func vToV() { print("vToV") } func intToInt(_ i: Int) -> Int { print("intToInt") return 4 } let f = Function(returnType: Void.self, argTypes: [], function: vToV) let r = f.perform([]) print(r) let f2 = Function(returnType: Int.self, argTypes: [Int.self], function: intToInt) let r2 = f2.perform([12]) print(r2) assert(f.isCompatible(f)) assert(!f.isCompatible(f2)) -- C. Keith Ray Senior Software Engineer / Trainer / Agile Coach * http://www.thirdfoundationsw.com/keith_ray_resume_2014_long.pdf
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users