Bir web hizmetini çağıran ve JSON yanıtını bir nesneye geri serileştiren genel bir işlevim var.
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 */
}
Başarmaya çalıştığım şey, bu Java kodunun eşdeğeri
public <T> T invokeService(final String serviceURLSuffix, final Map<String, String> params,
final Class<T> classTypeToReturn) {
}
- Yapmaya çalıştığım şey için yöntem imzam doğru mu?
- Daha spesifik olarak,
AnyClass
yapılacak doğru şeyi bir parametre türü olarak belirtmek mi? - Yöntemi çağırırken,
MyObject.self
returnningClass değeri olarak geçiyorum , ancak bir derleme hatası alıyorum "İfadenin türü '()', 'String' türüne dönüştürülemiyor"
CastDAO.invokeService("test", withParams: ["test" : "test"], returningClass: CityInfo.self) { cityInfo in /*...*/
}
Düzenle:
object_getClass
Holex'in bahsettiği gibi kullanmayı denedim , ama şimdi alıyorum:
hata: "'CityInfo.Type' yazın 'AnyObject' protokolüne uymuyor"
Protokole uymak için ne yapılması gerekiyor?
class CityInfo : NSObject {
var cityName: String?
var regionCode: String?
var regionName: String?
}
CastDAO.invokeService("test", withParams: ["test" : "test"]) { (ci:CityInfo) in }