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购买,还可以从TableViewController或NavigationController购买 。
宠物小精灵(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和ActivityIndicatorView对话框: Ficarábem经典鞋。
类LoadViewCell:UITableViewCell {
@IBOutlet弱var loadActivity:UIActivityIndicatorView!
}
Ó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 build ( Command + R )eeeee…………
Nadairáacontecer,tem umúltimopasso。
故事板,选择一个TableViewController , 身份检查器将其命名为PokedexViewController。
Agora sim companheiros,podemos dar uma build ( Command + 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