Используйте функцию callback()
внутри успеха foo()
. Попробуйте таким образом. Это просто и легко понять. & nbsp;
var lat = "";
var lon = "";
function callback(data) {
lat = data.lat;
lon = data.lon;
}
function getLoc() {
var url = "http://ip-api.com/json"
$.getJSON(url, function(data) {
callback(data);
});
}
getLoc();
Это потому, что Nameable является протоколом, Swift не знает, какой тип kind (флейвор) объекта принадлежит вашей входящей Nameable вашей функции. Это может быть экземпляр класса, конечно - но это может быть экземпляр структуры. И вы не можете назначить свойство константы struct , как показано в следующем примере:
struct NameableStruct : Nameable {
var name : String = ""
}
let ns = NameableStruct(name:"one")
ns.name = "two" // can't assign
Ну, по умолчанию параметр входящей функции равен константа - это точно так, как если бы вы сказали let
в объявлении вашей функции, прежде чем вы сказали nameable
.
Решение состоит в том, чтобы сделать этот параметр не - константа:
func nameNameable(var nameable: Nameable, name: String ) {
^^^
Правило @ matt.
Другое решение - объявить Nameable
как протокол class
только .
protocol Nameable: class {
// ^^^^^^^
var name : String { get set }
}
I думаю, это решение более подходит для этого случая. Поскольку nameNameable
бесполезен, если nameable
не является экземпляром class
.