मेरे पास एक जेनेरिक फ़ंक्शन है जो एक वेब सेवा को कॉल करता है और JSON प्रतिक्रिया को किसी ऑब्जेक्ट पर वापस क्रमबद्ध करता है।
class func invokeService<T>(service: String, withParams params: Dictionary<String, String>, returningClass: AnyClass, completionHandler handler: ((T) -> ())) {
/* Construct the URL, call the service and parse the response */
}
मैं जो पूरा करने की कोशिश कर रहा हूं वह इस जावा कोड के बराबर है
public <T> T invokeService(final String serviceURLSuffix, final Map<String, String> params,
final Class<T> classTypeToReturn) {
}
- क्या मैं सही को पूरा करने के लिए जो कोशिश कर रहा हूं, उसके लिए मेरी विधि हस्ताक्षर है?
- विशेष रूप से,
AnyClass
पैरामीटर के रूप में निर्दिष्ट करना सही चीज़ है? - विधि को कॉल करते समय, मैं
MyObject.self
रिटर्निंगक्लास मान के रूप में पास कर रहा हूं , लेकिन मुझे एक संकलन त्रुटि मिलती है "अभिव्यक्ति के प्रकार को परिवर्तित नहीं कर सकता '()' टाइप करने के लिए 'स्ट्रिंग'"
CastDAO.invokeService("test", withParams: ["test" : "test"], returningClass: CityInfo.self) { cityInfo in /*...*/
}
संपादित करें:
मैंने उपयोग करने की कोशिश की object_getClass
, जैसा कि होलेक्स ने उल्लेख किया है, लेकिन अब मुझे मिलता है:
त्रुटि: "टाइप 'CityInfo.Type' प्रोटोकॉल 'AnyObject' के अनुरूप नहीं है"
प्रोटोकॉल के अनुरूप करने के लिए क्या करने की आवश्यकता है?
class CityInfo : NSObject {
var cityName: String?
var regionCode: String?
var regionName: String?
}
CastDAO.invokeService("test", withParams: ["test" : "test"]) { (ci:CityInfo) in }