Criando uma Pokedex com Swift零件:3/3

Mostrando nossos monstrinhos

Recapitulando单方前。

无需任何Xcode控制台,就可以解析请求的JSON请求和最终结果。

Criando uma Pokedex com Swift零件:2/3
Consumindo um JSON medium.com

最终用户可以通过TableViewController调用结果,也可以使用JSON格式的报表,而无需控制台,也可以使用linda和maravilhosa Pokedex。

Criando布局

Paranoççãonossa simplesexibiçãovamos abrir o情节提要que foi criado com o projeto,或Main.Storyboard。

获取对象库,不要在导航控制器和情节提要中发现任何劣质的导航控制器。

选择一个ViewController,并添加一个ViewController

选择一个NavigationController,并在菜单中添加属性检查器

购买ViewController并进行操作是Initial View Controller。

对象库可从 TableViewCell购买,还可以从TableViewControllerNavigationController购买

宠物小精灵(Umacélulavai ser a do pokemon),乌玛(an uma)vai ser de load e a outra vai ser umacélulavazia,que vai ser exibida caso de algum erro。

Vamoscomeçarpelo单品,配以pelacélulade。

清除对象库和 活动指示器查看参数。

证明书的原状,证明书的合法性。

Selecione o objeto e siga和abaixo。

Agoraévez dacélulaque vai exibir nossos queridos e amados宠物小精灵。

UIImageView e duas UILabels 。 不能从视觉上解释建筑学上的任何限制 。 Mas para quem tiver curiosidade,deixei o meu assim。

标题栏的末尾布局,以及标识符的名称。 OS 标识符 sãoos nomes dascélulase usaremos isso nocódigo。

Selecione acélulados pokemons,没有上等的seelecione o 属性检查器 ,采购表视图单元格名称的首选,mas lembre-se esse nomeseráusado na hora docódigo。

Agorafaçaa mesma coisa com是duas outrascélulas,de load ea vazia是colocando outros nome。

Muito bem pessoas,程序设计者配置。

科迪菲万多

来自法国的Vamos criar duas类,最热门的rar布局和神奇宝贝的布局。

Crie uma TableViewCell chamada PokemonViewCell,essaycélulavai montar o layout dacélulado pokemon。

Vamos criar umafunçãochamada configureCell queiráreceber o model do Pokemon ea imagem queserácarregada。

 类PokemonViewCell:UITableViewCell { 
func configureCell(withModel模型:PokemonModel,pokemonSpriteData data:Data){
// TODO:Adicionar campos
}
}

Masestáfaltando uma coisa nessecódigo,圣保罗坎佩斯州奎塞哈possível改型val valores,帕拉解析器isso vamos criar Outlets。

故事板,口袋妖怪塞莱西奥内,无名氏身份检查员和犯罪现场调查员。

助理编辑 Abra o no lado direito上级,irádividir a tela em dois。

选择要查看的图像,请控制鼠标,然后再单击鼠标。

商店名称和名称的来源,您可以在商店购物,也可以在商店购物。

  @IBOutlet弱var imgView:UIImageView! 
@IBOutlet弱var pokemonIdLb:UILabel!
@IBOutlet弱var pokemonNameLb:UILabel!
  func configureCell(withModel模型:PokemonModel,pokemonSpriteData data:Data){....... 

Agora podemos editar esses campos dentro da nossafunçãodeconfiguração。 或完全免费,请执行以下操作:

 公共函数configureCell(withModel模型:PokemonModel,pokemonSpriteData data:Data){ 
self.pokemonIdLb.text =“#\(model.id)”
self.pokemonNameLb.text =模型名称
self.imgView.image = UIImage(数据:数据)
}

Falta criar uma classe para nossacélulade load。

请按以下说明加载LoadViewCell和ActivityIndi​​catorView对话框: Ficarábem经典鞋。

 类LoadViewCell:UITableViewCell { 
@IBOutlet弱var loadActivity:UIActivityIndi​​catorView!
}

Ótimo,暂无布局,不存在valores,不完全不可用,PokedexViewController,不可用TableViewController做故事板。

根据功能要求控制的Vamos deixar para criar,应要求的可变变量要求primero vamos criar。

Ocódigoficaráassim。

  PokedexViewController类:UITableViewController { 
  //Variável响应pelos请求 
var requestPokedex:ResquestPokedex = ResquestPokedex()
// Guarda todos os pokemons
var resultModel:PokedexModel?
// Guarda a exquidade de queserãoexibidos
var resultCount = 0
// Guarda as ainformationaçõesde cada pokemon separadamente
var pokemons = [PokemonModel]()
//瓜达(Guarda)的形象
var imagePokemons = [Data]()
 覆盖func viewDidLoad(){ 
super.viewDidLoad()
}
}

prosxes etapaécriar asfunçõesresponsáveispelos request,serãotrêsfunções,uma para todos os pokemons,uma para cada pokemon pegar informationa mais especificas e uma para as imagen。

索取宠物小精灵

  fileprivate func loadPokedex(URL:字符串?) 
{
requestPokedex.getAllPokemons(url:url){(响应)在
切换响应
{
案例。成功(让模型):
// Passa o model geral para nossa variavel
self.resultModel =模型
// Essafunçãoserácriada futuramente
// Pedimos para carregar um pokemon especifico,estamos passando self.resultCount + 1 porque os ids dos pokemons na APIcomeçampartir do 1
self.loadPokemon(self.resultCount + 1)
//增加结果的数量
self.resultCount + = model.results
 案例.serverError(让描述): 
打印(说明)
案例.timeOut(让描述):
打印(说明)
案例.noConnection(让描述):
打印(说明)
}
}
}

索取宠物小精灵的特殊说明

De pois de carregar todos os pokemons compaginação,hora de carregar um pokemon por vez para pegar suasinformationaçaesmais especificas como imagem dele。

  fileprivate func loadPokemon(_ id:Int) 
{
requestPokedex.getPokemon(id:id){(响应)在
切换响应
{
案例。成功(让模型):
// Adiciona o pokemon em nossa variavel
self.pokemons.append(模型)
// Manda fazer加载da imagem做pokemon carregado
self.loadImagePokemon(URL:model.urlImage)
案例.serverError(让描述):
打印(说明)
案例.timeOut(让描述):
打印(说明)
案例.noConnection(让描述):
打印(说明)
}
}
}

要求da imagem do pokemon

最终要求éno da imagem dos nossos戳怪物。

  fileprivate func loadImagePokemon(URL:字符串) 
{
requestPokedex.getImagePokemon(url:url){(响应)在
切换响应
{
案例。成功(让模型):
// Salva a imagem em nossa variavel
self.imagePokemons.append(model)
//如果内联
// Se o ultimo pokemon carregado ainda nao for o ultimo pokemon da lista de todos pokemons que nos temos,mandamos ele carregar o proximo pokemon
// Se tiver sido carregado todos os pokemons eu mando atualizar a tabela
self.pokemons.last!.id <self.resultCount?
self.loadPokemon(self.pokemons.last!.id +1):
self.tableView.reloadData()
案例.noConnection(让描述):
打印(说明)
案例.serverError(让描述):
打印(说明)
案例.timeOut(让描述):
打印(说明)
}
}
}

Tabela控件

Játemos是根据pelos的要求做出的响应,而agora falta则是以tabira的irirãofazer o controle来实现的。

Vamos用3种功能控制了塔贝拉,使用了量子化器,使用了塔贝拉,使用了蒙塔拉尔用了célulae了quando用了célulaentra na tela。

否定量化器量子化。

 覆盖func tableView(_ tableView:UITableView,numberOfRowsInSection部分:Int)-> Int { 
//主角próximapáginaseráadicionado a resultidas de mais umacélulaqueirácarregar mais pokemons
返回resultModel?.next ==“”吗? resultCount:resultCount + 1
}

Assim nossa tabelasaberáQuantascélulasela vai exibir。 Mas esse + 1,como vamos carregar mais pokemons quando chegar a hora?

参数将显示一个标签。

 覆盖func tableView(_ tableView:UITableView,willDisplay单元格:UITableViewCell,forRowAt indexPath:IndexPath){ 
如果indexPath.row == resultCount {
loadPokedex(url:resultModel?.next)
}
}

Quando o ultimo resultado aparecer vamos pedir para carregar mais pokemons,sem travar o应用。

Agora oúltimoe mais重要酒店,visual dascélulasna tabela。

 覆盖func tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath)-> UITableViewCell { 
  // Se表示最后的célulacarrego的célulade负载 
如果indexPath.row == resultCount {
守卫让cellLoad = tableView.dequeueReusableCell(withIdentifier:“ loadCell”,for:indexPath)为? LoadViewCell else {
返回tableView.dequeueReusableCell(withIdentifier:“ emptyCell”,for:indexPath)
}
  //加载动画 
cellLoad.loadActivity.startAnimating()
返回cellLoad
}
  //精灵宝可梦小精灵 
守卫让单元格= tableView.dequeueReusableCell(withIdentifier:“ cell”,for:indexPath)为? PokemonViewCell else {
返回tableView.dequeueReusableCell(withIdentifier:“ emptyCell”,for:indexPath)
}
  // Configuro o visual dacélula 
cell.configureCell(withModel:pokemons [indexPath.row],pokemonSpriteData:imagePokemons [indexPath.row])
 返回单元 
}

Tudo feito,agorasódar o famoso buildCommand + R )eeeee…………

Nadairáacontecer,tem umúltimopasso。

故事板,选择一个TableViewController身份检查器将其命名为PokedexViewController。

Agora sim companheiros,podemos dar uma buildCommand + R )。

永久性的科莫人,动荡的人,动荡的人偶的商标,动荡的口袋妖怪。

Olhasó…。 科莫马加卡。

链接的参数查询器。

Miciano / Pokedex
通过在GitHub上创建一个帐户为Pokedex开发做出贡献。 github.com

Assim finalizamos nossa Pokedex e essa sequencia de tutoriais。 Espero que tenha ajudado。

Obrigado por me acompanhar nessa jornada Pokemon