ฉันมีฟังก์ชั่นทั่วไปที่เรียกใช้บริการเว็บและทำให้การตอบสนอง 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 */
}
สิ่งที่ฉันพยายามทำให้สำเร็จคือโค้ด Java ที่เทียบเท่ากัน
public <T> T invokeService(final String serviceURLSuffix, final Map<String, String> params,
final Class<T> classTypeToReturn) {
}
- ลายเซ็นวิธีการของฉันเป็นสิ่งที่ฉันพยายามที่จะทำให้ถูกต้องหรือไม่?
- โดยเฉพาะอย่างยิ่งการระบุ
AnyClass
ว่าเป็นพารามิเตอร์ประเภทสิ่งที่ถูกต้องที่จะทำ? - เมื่อเรียกเมธอดฉันกำลังส่งผ่าน
MyObject.self
ค่า returnClass แต่ได้รับข้อผิดพลาดในการคอมไพล์"ไม่สามารถแปลงประเภทของนิพจน์ '()' เป็นประเภท 'String'"
CastDAO.invokeService("test", withParams: ["test" : "test"], returningClass: CityInfo.self) { cityInfo in /*...*/
}
แก้ไข:
ฉันพยายามใช้object_getClass
ตามที่ระบุโดย holex แต่ตอนนี้ฉันได้รับ:
ข้อผิดพลาด: "Type 'CityInfo.Type' ไม่สอดคล้องกับโปรโตคอล 'AnyObject'"
สิ่งที่ต้องทำเพื่อให้สอดคล้องกับโปรโตคอล?
class CityInfo : NSObject {
var cityName: String?
var regionCode: String?
var regionName: String?
}
CastDAO.invokeService("test", withParams: ["test" : "test"]) { (ci:CityInfo) in }