Stimmt diese Funktion? Rufen Sie eine Funktion mit Abschluss auf (swift – iOS)IOS

Programmierung für iOS
Guest
 Stimmt diese Funktion? Rufen Sie eine Funktion mit Abschluss auf (swift – iOS)

Post by Guest »

Das Problem

Ich muss einen Film auf der API suchen und auf meinem Tisch die gesuchten Filme ansehen.

Sprache

Swift 3 - xcode 8

Funktion zum Abrufen von Json von der API

Code: Select all

func searchMoviesOnJson(imdbTitle: String, completionHandler: @escaping (Dictionary?) -> ()) {

let urlByName: String = "https://www.omdbapi.com/?s=\(imdbTitle)&type=movie"

//returns a list of movies that contains the title searched
//------------------------------------------------

Alamofire.request(urlByName).responseJSON {
response in

switch response.result {

case .success(let value):
let moviesJSON = value
completionHandler(moviesJSON as? Dictionary)

case .failure(_):
completionHandler(nil)
}
}
//------------------------------------------------
Diese Klasse namens Movie (die auf der API durchsucht wird):

Code: Select all

class Movie {

var poster: String?
var title : String?
var year  : String?
var imdbID: String?

init(poster: String?, title: String?, year: String?, imdbID: String?) {

if let isPoster = poster { self.poster = isPoster }
else { self.poster = nil }

if let isTitle = title { self.title = isTitle }
else { self.title = nil }

if let isYear = year { self.year = isYear }
else { self.year = nil }

if let isImdbID = imdbID { self.imdbID = isImdbID }
else { self.imdbID = nil }

}
}
Und dann mein DAO:

Code: Select all

class MovieDAO {

//Search By Title

static func getMovies(imdbTitle: String, completionHandler: @escaping (([Movie]) -> ())) {

searchMoviesOnJson(imdbTitle: imdbTitle, completionHandler: {
newMoviesJSON in

if let moviesJSON = newMoviesJSON {

if moviesJSON["Error"] != nil { return }

else {

//casting
let arrayOfMovies: [[String : String]] = newMoviesJSON!["Search"] as! [[String : String]]

var fetchedMovies = [Movie]()

for eachFetchedMovie: [String : String] in arrayOfMovies {

var poster: String?
var title : String?
var year  : String?
var imdbID: String?

if let isPoster = eachFetchedMovie["Poster"] { poster = isPoster }
else { poster = nil }

if let isTitle = eachFetchedMovie["Title"] { title = isTitle }
else { title = nil }

if let isYear = eachFetchedMovie["Year"] { year = isYear }
else { year = nil }

if let isImdbID = eachFetchedMovie["imdbID"] { imdbID = isImdbID }
else { imdbID = nil }

let movie: Movie = Movie(poster: poster, title: title, year: year, imdbID: imdbID)

fetchedMovies.append(movie)

}
completionHandler(fetchedMovies)
}

}

})

}
}
Was ist ein Abschluss und was würde passieren, wenn ich ihn nicht in diesen Funktionen verwende?

Wie kann ich diese Funktion nun testen? Ich nenne es in meinem AppDelegate wie folgt:

Code: Select all

print(MovieDAO.getMovies(imdbTitle: "arq"))
Aber der Xcode gibt einen Fehler zurück, der besagt, dass im Aufruf ein Parameter fehlt. Können Sie mir das erklären? Ich habe darüber gelesen, aber ich bin ein Anfänger und es verwirrt mich immer noch.

Oh, ich möchte ein Array mit dem gesuchten Titel drucken. Ich bin mir fast sicher, dass meine Funktion das nicht zurückgibt. Wie kann ich die Funktion dafür anpassen?

Zum besseren Verständnis stellt die API diesen JSON-Code für den gesuchten Film bereit:

Code: Select all

{
Response = True;
Search =     (
{
Poster = "https://images-na.ssl-images-amazon.com/images/M/MV5BMjAxODQ2MzkyMV5BMl5BanBnXkFtZTgwNjU3MTE5OTE@._V1_SX300.jpg";
Title = ARQ;
Type = movie;
Year = 2016;
imdbID = tt5640450;
},
{
Poster = "N/A";
Title = Arq;
Type = movie;
Year = 2011;
imdbID = tt2141601;
},
{
Poster = "N/A";
Title = "A.R.Q.";
Type = movie;
Year = 2015;
imdbID = tt3829612;
}
);
totalResults = 3;
}
Update 1:

Mir gefiel der Vorschlag und ich rief (auf meinem AppDelegate an, nur zum Testen und Ansehen Wenn es das bekommt, was ich will, in diesem Fall eine Liste der Filme, die das „arq“ im Titel enthalten), sieht meine Funktion wie folgt aus:

Code: Select all

MovieDAO.getMovies(imdbTitle: "arq") {
(movies: [Movie]) in
// Do something with the movies
print(movies)
}
Die Rückgabe war dieser Fehler:
Image


Was stimmt mit dieser grünen Zeile nicht?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post