Передача протокола [дубликат]

Используйте функцию 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();
41
задан matt 2 December 2014 в 04:53
поделиться

3 ответа

Это потому, что 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 ) {
                  ^^^
34
ответ дан matt 28 August 2018 в 11:48
поделиться
0
ответ дан Narendra G 28 August 2018 в 11:48
поделиться

Правило @ matt.

Другое решение - объявить Nameable как протокол class только .

protocol Nameable: class {
//               ^^^^^^^ 
    var name : String { get set }
}

I думаю, это решение более подходит для этого случая. Поскольку nameNameable бесполезен, если nameable не является экземпляром class.

83
ответ дан rintaro 28 August 2018 в 11:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: