Вы не можете возвращать данные непосредственно из асинхронной задачи.
Решение с Swift 2 должно сделать обработчик завершения следующим образом:
class PostFOrData {
// the completion closure signature is (NSString) -> ()
func forData(completion: (NSString) -> ()) {
if let url = NSURL(string: "http://210.61.209.194:8088/SmarttvWebServiceTopmsoApi/GetReadlist") {
let request = NSMutableURLRequest( URL: url)
request.HTTPMethod = "POST"
let postString : String = "uid=59"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if let data = data,
jsonString = NSString(data: data, encoding: NSUTF8StringEncoding)
where error == nil {
completion(jsonString)
} else {
print("error=\(error!.localizedDescription)")
}
}
task.resume()
}
}
}
let pfd = PostFOrData()
// you call the method with a trailing closure
pfd.forData { jsonString in
// and here you get the "returned" value from the asynchronous task
print(jsonString)
}
Таким образом, завершение вызывается только тогда, когда асинхронная задача завершена. Это способ «вернуть» данные без фактического использования return
.
версия Swift 3
class PostFOrData {
// the completion closure signature is (String) -> ()
func forData(completion: @escaping (String) -> ()) {
if let url = URL(string: "http://210.61.209.194:8088/SmarttvWebServiceTopmsoApi/GetReadlist") {
var request = URLRequest(url: url)
request.httpMethod = "POST"
let postString : String = "uid=59"
request.httpBody = postString.data(using: String.Encoding.utf8)
let task = URLSession.shared.dataTask(with: request) {
data, response, error in
if let data = data, let jsonString = String(data: data, encoding: String.Encoding.utf8), error == nil {
completion(jsonString)
} else {
print("error=\(error!.localizedDescription)")
}
}
task.resume()
}
}
}
let pfd = PostFOrData()
// you call the method with a trailing closure
pfd.forData { jsonString in
// and here you get the "returned" value from the asynchronous task
print(jsonString)
}
В настоящее время sagemaker-runtime имеет единственный метод endoke-endpoint. Вызов других ресурсов REST, скорее всего, возможен, если вы вызовете URL конечной точки самостоятельно через HTTP (то есть без использования aws sagemaker-runtime ), однако вам, вероятно, потребуется позаботиться о требуемом sigv4.
/ invocations не является конечной точкой SageMaker, это путь HTTP-запроса, в котором обрабатывается запрос прогнозирования.
См. документацию: https://docs.aws.amazon.com/sagemaker/latest/dg/API_runtime_InvokeEndpoint.html
Синтаксис запроса: POST / endpoints / EndpointName / invocations HTTP / 1.1 Content-Type: ContentType Accept: Accept
К вашей конечной точке запрос выглядит так: POST / endpoints / $ (DEPLOYMENT_NAME) -staging / invocations HTTP / 1.1 Content-Type : ContentType Accept: Accept