Я пытаюсь вернуть значение из действия, но я получаю две ошибки:возвращаемый результат действий по Function
Using the generic type 'List<T>' requires 1 type arguments
и
'DataManager.MissionData' is a type, which is not valid in the given context
GameSmart.sdk.LoadData()
загружает данные с нашего веб-сервера с помощью класс WWW
. Я хотел бы вернуть ответ в Action и сохранить его в переменной data
и вернуть LoadDataFromGameSmart
эти данные.
public Type LoadDataFromGameSmart<Type>(){
Type data = default(Type);
Debug.Log ("Loading Data from GameSmart");
GameSmart.sdk.LoadData(List<MissionData> data = (LoadDataResponse response) => {
return JsonUtility.FromJson<GSWrapper>(response.data).missionData;
});
return data;
}
[System.SerializableAttribute]
public class GSWrapper {
public List<MissionData> missionData;
public static GSWrapper CreateFromJSON(string jsonString){
return JsonUtility.FromJson<GSWrapper>(jsonString);
}
}
LoadData выглядит следующим образом:
public void LoadData(Action<LoadDataResponse> onComplete = null){
if(!IsValid()){return;}
Send(endpoint_loadData, onComplete);
}
protected void Send<T>(string endpoint, Action<T> onComplete = null){
WWWForm form = new WWWForm();
StartCoroutine(Request(endpoint, form, onComplete));
}
IEnumerator Request<T>(string endpoint, WWWForm form, Action<T> onComplete = null){
form.AddField("playToken", playToken);
WWW www = new WWW((protocol + "://" + GetHostName() + api_path) + endpoint, form);
yield return www;
if(onComplete != null){
onComplete(JsonUtility.FromJson<T>(www.text));
}
}
Я попытался с помощью:
GameSmart.sdk.LoadData(Func<Type> data = (LoadDataResponse response) => {
return JsonUtility.FromJson<GSWrapper>(response.data).missionData;
});
Но тогда я получаю эту ошибку:
Using the generic type 'Func<TResult>' requires 1 type arguments
Не уверен, если это уместно, но вот MissionData
класс:
[System.Serializable]
public class MissionData
{
public int ID;//the ID of the Mission
public bool isLocked = true;
public List<LevelData> levelsData = new List<LevelData>();//the levels of the mission
/// <summary>
/// Find the level data by ID.
/// </summary>
/// <returns>The level data.</returns>
/// <param name="ID">the ID of the level.</param>
public LevelData FindLevelDataById (int ID)
{
foreach (LevelData levelData in levelsData) {
if (levelData.ID == ID) {
return levelData;
}
}
return null;
}
}
Итак, как я могу вернуть результат действий, так что LoadDataFromGameSmart
может возвращать конечный результат?
'GameSmart.sdk.LoadData (Список data = ...);' не похож на действительный синтаксис C#. Вы пытаетесь объявить новую переменную, называемую 'data', в этом месте? Если нет, зачем упоминать тип 'List '? –
Удаление, которое дает эту ошибку: 'Невозможно преобразовать лямбда-выражение в тип 'Тип', потому что это не тип делегата' –
Что такое подпись' LoadData'? Есть ли какая-либо документация о том, что она ожидает? –