暑假第三周任务——天气预报

news2024/11/13 16:35:09

暑假第三周任务——天气预报

文章目录

  • 暑假第三周任务——天气预报
    • 前言
    • URL与API
      • API与URL的关系
    • 获取网络请求
    • 首页
    • 搜索界面
    • 详情界面
      • 添加功能
    • 浏览界面
    • 总结

前言

这个天气预报主要是通过申请网络请求来获取实时数据,来实现一个天气预报的功能,在这里主要是因为笔者第一次接触有关通过网络请求来获取数据的相关内容,所以刚开始遇到很多问题,后面渐渐的才找回一点思路去完成这个项目

URL与API

这里概念笔者引自其他人的博客API介绍

API(Application Programming Interface)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。也可以理解为是两个应用程序之间通信的机制,或者使用一组规则和协议的组件或计算机硬件。
URL(uniform resource locator;URL)是因特网的万维网服务程序上用于指定信息位置的表示方法。

API与URL的关系

  • Web API 是通过 URL 暴露的。每个 Web API 的端点(Endpoint)都有一个对应的 URL。
  • URL作为API的访问接口,我们可以通过特定的URL来调用API的功能。

简单来说就是
URL 是一个定位符,标识资源的位置和访问方式。
API 是一组接口,定义了如何访问和使用某些功能或数据。
Web API 使用 URL 作为其访问点,客户端通过 URL 发送请求来调用 API 的功能。

获取网络请求

在简单了解这两者的区别之后,我们现在要学习如何获取网络请求,主要也就分成了
首先我们要学会怎么获取网络请求。
一共分成五个步骤:

  • 创建请求地址
  • 创建请求类
  • 创建会话
  • 根据会话创建任务
  • 启动任务
    注意这里需要遵循协议NSURLSessionDelegate,下面给出相关代码
//创建请求地址,笔者这里是传入了一个城市的一个strId,这样才可以构成一个完整的请求地址。
 NSString* urlString = [NSString stringWithFormat: @"https://geoapi.qweather.com/v2/city/lookup?location=%@&key=2211750bdc834763ba3c5f57ce98c307", self.search.text];
 NSURL *url = [NSURL URLWithString:urlString];
//创建请求类
NSURLRequest* request = [NSURLRequest requestWithURL:url];//通过URL创建一个网络请求类
//创建会话
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
//根据会话创建任务。
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if (error) {
            NSLog(@"error = %@", error.localizedDescription);
        } else {
            [self.locationArray removeAllObjects];
            NSDictionary* second = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
            NSMutableArray* timeAry = [[NSMutableArray alloc] init];
            timeAry = second[@"location"];
            //NSLog(@"%@", timeAry);
            NSLog(@"geo");
            for (NSDictionary* current in timeAry) {
                [self.locationArray addObject:current];
            }
        }
    }];
//启动任务
[dataTask resume];

这里解释一下上面几个函数的相关用法

sessionWithConfiguration:delegate:delegateQueue:这是一个类方法,用于创建一个 NSURLSession 实例。
configuration: NSURLSessionConfiguration 对象,定义了会话的行为、策略和超时等属性。这里使用的是 [NSURLSessionConfiguration defaultSessionConfiguration],表示使用默认的会话配置。
delegate: 指定会话的委托对象。委托对象会实现 NSURLSessionDelegate 协议,用于处理会话相关的事件。
delegateQueue: 指定一个 NSOperationQueue,用于调度委托方法的执行。这里使用的是 [NSOperationQueue mainQueue],表示委托方法将在主线程上执行。

这里的第五步其实可以采用一个 [session dataTaskWithURL:url completionHandler:]的方式去创建一个,但是如果以后面的方式去创建的话,就意味着是以一种GET方式去获取网络请求,这样只能满足一些简单的网络请求,而使用request方式来获取数据可以满足更复杂的情况。
所以我们尽量采用request方法来获取网络请求,采用request的方式可以满足更多需求

首页

这里我先给出首页的一个效果,我在这里只是简单的在导航栏上面加了一个searchBar的控件,然后设置了一个左侧的导航栏的一个Label。初始化界面设计了一个北京作为起初就存在的一个cell,这里有部分设置圆角cell的内容,但对于这部分内容,笔者也只是粗略了解了一席通过贝塞尔曲线来绘制一个圆角cell的内容。

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    CGFloat radius = 10;
    if ([tableView numberOfRowsInSection:indexPath.section] == 1) {//判断每组cell的一个行数。
        UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:cell.bounds cornerRadius:radius];// 使用指定的圆角半径radius创建一个带有圆角的矩形路径
        CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];//CAShapeLayer 是一个图层类。它的主要作用是将 UIBezierPath 描绘的路径应用到图层上。
        maskLayer.frame = cell.bounds;//设置frame
        maskLayer.path = maskPath.CGPath;//设置对应路径
        cell.layer.mask = maskLayer;//完成覆盖,只有被覆盖的位置会被遮盖
    }
}

剩下的内容都是通过类似的网络请求来获取相关的一个数据,然后加载到cell上。
请添加图片描述

搜索界面

这里我们先给出一个效果图。
请添加图片描述

可以看到我们这里实现了一个通过添加字符实时搜索的一个效果,这就是我们需要实现的模糊搜索的效果。这里主要要注意的是我们对于搜索时候刷新UITableVIew的一个时机,这里笔者使用的是UISearchBar这个控件,这里我们需要使用一个协议方法来实现一个模糊搜索。
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(nonnull NSString *)searchText
这个协议函数是实时监控我输入文字的变化的,每次输入完我们只要进行一次网络请求,就可以实现一个模糊搜索的效果。

详情界面

请添加图片描述
这里详情页主要的功能就是展示我们该城市的一个天气,这里同样是通过一个UITableVIew和其他UITableVIew的一个嵌套实现一个我们需要的一个效果,笔者这里使用的是和风天气的图标:和风天气,也是使用这个API来调用我们所需要的一个数据内容。

添加功能

这里我们的详情页要有一个添加到首页的功能,这里我使用的是一个通知传值,我通过通知中心来给前两个页面传值,将这个城市的Id传回去,然后在通知传值的接受方法里面,在原先的数组里面添加,然后刷新单元格就可以实现这个效果,这里还存在一个判重的问题,这里的判重,我是通过传入的城市id数组通过一个for循环遍历来判别重复
请添加图片描述

浏览界面

这里浏览界面其实是通过一个视图控制器控制多个子视图控制器,并且将这些子视图控制器的view添加到主视图控制器的滑动视图上面,这样就可以实现一个轮播图的效果请添加图片描述
这里我给出相关代码

for (int i = 0; i < count; i++) {
        detailViewController* deatil = [[detailViewController alloc] init];
        deatil.addButton.hidden = YES;
        deatil.strId = self.nameAry[i];
        NSLog(@"%@", deatil.strId);
        deatil.tag = i;
        deatil.nameArray = [self.nameAry mutableCopy];
        deatil.iconArray = [self.timeAry mutableCopy];
        deatil.view.frame = CGRectMake(WIDTH * i, 0, WIDTH, HEIGHT);
        UIButton* btn = [UIButton buttonWithType:UIButtonTypeCustom];
        btn.frame = CGRectMake(10, 10, 60, 60);
        [btn setTitle:@"返回" forState:UIControlStateNormal];
        [btn addTarget:self action:@selector(press) forControlEvents:UIControlEventTouchUpInside];
        [self addChildViewController:deatil];//给自己添加子视图控制器
        [self.scrollView addSubview:deatil.view];//给滑动视图添加我们子视图控制器的view
        [deatil.tableView addSubview:btn];
    }

总结

这是暑假最后一个任务,第一次学习有关网络请求的内容,刚开始确实会不从下手,但是多写写相关代码,多看看相关的博客,才可以找到相关的思路,要多去尝试,才可以完成一个项目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1974304.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

对优先级队列(堆)的理解

目录&#xff1a; 一. 优先级队列&#xff1a; 二. 优先级队列的模拟实现&#xff1a; 三.常用接口介绍: 一. 优先级队列&#xff1a; 1 概念&#xff1a; 队列是一种先进先出的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&#xff0c;一般出队列时…

红酒与爱情:浪漫时刻的佳酿

在爱情的世界里&#xff0c;红酒如同一首温柔的诗篇&#xff0c;轻轻诉说着浪漫与甜蜜。当定制红酒洒派红酒&#xff08;Bold & Generous&#xff09;与爱情相遇&#xff0c;它们共同绘制出一幅幅令人心醉的浪漫画卷&#xff0c;让每一刻都充满了无尽的柔情与温暖。 一、爱…

MLOPS工具集教程-快速入门MLflow

文章目录 一、什么是 MLOps&#xff1f;二、MLOps 工具有什么作用&#xff1f;三、免费开源 MLOps 工具和平台——MLflow3.1 MLflow介绍3.2 安装MLflow3.3启动MLflow3.4 API文档3.5 训练模型演示实例 MLOps 策略越来越多地应用于机器学习模型以及构建这些模型的团队中&#xff…

webpack打包发布~

1、安装webpack&#xff08;局部安装webpack&#xff09;。 npm i webpack webpack-cli -D 2、安装成功之后&#xff0c;你会在package.json文件中看到这个。 3、新建webpack.config.js文件&#xff0c;里面写配置编译模式&#xff0c;入口出口等&#xff08;这里演示的是单入…

任务管理器中的CompatTelRunner进程是做什么的?我该怎样把它关闭

一、问题描述 当我们打开电脑使用时候会发现系统反应较慢&#xff0c;使用起来没有那么流畅&#xff1b;此时我们打开任务管理器后发现是一个名为【CompatTelRunner】的进程占用大量的CPU资源导致&#xff08;点击任务管理器的CPU字样即可对使用资源进行排序&#xff09;&#…

【靶场实操】sql-labs通关详解----第二节:前端页面相关(Less-11-Less-17)

SQL注入攻击是一种针对Web应用程序的安全漏洞&#xff0c;那么自然&#xff0c;SQL注入攻击也和前端页面息息相关&#xff0c;用户输入未被正确处理、动态查询的构建、前端JavaScript代码错误&#xff0c;等等我问题都可能造成安全威胁。 在上一节&#xff0c;我们了解了基础的…

23届24届均可投!Engineering Star Program火热进行中

Hi 大家好&#xff0c;我是Chowley&#xff0c;我们组现在还有个青年工程师的HC&#xff08;23-24届均可&#xff09;&#xff0c;正在寻找QA队友&#xff0c;有兴趣用我内推码官网投递&#xff0c;简历直接发我ld 我是今年校招进入的虾皮&#xff0c;现在full-time两个月了&a…

互联网十万个为什么之什么是负载均衡?

负载均衡是一种对流量进行按需分发的服务&#xff0c;通过将流量分发到不同的后端服务器来扩展应用系统的吞吐能力&#xff0c;并且可以消除系统中的单点故障&#xff0c;提升应用系统的可用性。 为什么需要负载均衡&#xff1f; 负载均衡的出现主要是为了解决用户在网络服务…

【Godot4自学手册】第四十三用着色器(shader)给纹理描边

这一节我们学一下用着色器&#xff08;shader&#xff09;描边效果。来看看最终效果&#xff1a; 一、进行shader初始设置 首先我们进入NPC场景&#xff0c;选择Sprite2D节点&#xff0c;在检查器中中岛CanvasItem属性&#xff0c;并在Material->Material后方选择下拉按钮…

如何从智联招聘网站快速抓取职位详情?两大技巧揭秘

摘要&#xff1a; 本文将揭秘如何利用Python爬虫技术&#xff0c;高效且合法地从智联招聘网站抓取职位详情信息。通过实战示例&#xff0c;展现两大核心技巧&#xff0c;助你在大数据时代抢占先机&#xff0c;为你的市场分析、人才研究提供强大支持。 一、引言&#xff1a;数据…

LLM4Decompile反编译大模型的试用实践过程梳理

LLM4Decompile 是一款开源大型语言模型,专注于反编译工作,我们将其试用过程进行介绍: 论文地址:https://arxiv.org/abs/2403.05286 代码地址:https://github.com/albertan017/LLM4Decompile 首先,找到代码位置: 1.搭建基础环境1.python3,我用的是3.12.4 …

LinuxC++(7):认识主函数参数

主函数有哪些参数&#xff1f; main函数有三个参数&#xff0c;argc、argv和envp&#xff0c;它的标准写法如下&#xff1a; int main(int argc,char *argv[],char *envp[]){return 0; } 认识argc argc表示有几个参数&#xff0c;主函数自身也算一个&#xff0c;所以如果没…

解锁概念测量类比完成任务如何改变词语表征

欢迎来到雲闪世界。本文旨在讨论 word2vec 和 GloVe 算法的发展&#xff0c;因为这与这些算法的第二个应用目的有关&#xff1a;分析文本语料库中包含的概念。首先&#xff0c;根据 word2vec 算法的历史背景对其进行讨论。然后&#xff0c;描述类比完成任务&#xff0c;该任务突…

【C语言篇】操作符详解(上篇)

文章目录 操作符详解&#xff08;上篇&#xff09;前言sizeof强制类型转换算术操作符赋值操作符逻辑操作符逻辑取反运算符逻辑与运算符逻辑或运算符 关系操作符自增自减操作符和-逗号表达式 操作符详解&#xff08;上篇&#xff09; 前言 操作符又被叫做运算符&#xff0c;是不…

深度学习中降维的几种方法

笔者在搞网络的时候碰到个问题&#xff0c;就是将特征维度从1024降维到268&#xff0c;那么可以通过哪些深度学习方法来实现呢&#xff1f; 文章目录 1. 卷积层降维2. 全连接层降维3. 使用注意力机制4. 使用自编码器 1. 卷积层降维 可以使用1x1卷积层&#xff08;也叫pointwis…

AI新闻:近期AI领域最繁忙的一周!

本周AI领域发生了许多令人瞩目的大事&#xff0c;可以说是繁忙的一周了。下面我将为大家一一盘点这些精彩瞬间。 OpenAI的新功能和发展 高级语音功能&#xff1a;OpenAI开始推出全新的高级语音功能&#xff0c;之前展示时声音如同斯嘉丽约翰逊。这项功能已经开放给部分用户使用…

鸿蒙双向绑定组件:TextArea、TextInput、Search、Checkbox,文本输入组件,图案解锁组件PatternLock

对象暂不支持双向绑定&#xff0c; 效果&#xff1a; 代码&#xff1a; Entry Component struct MvvmCase {StateisSelect: boolean falseStatesearchText: String ""StateinputText: string ""StateareaText: string ""build() {Grid() {G…

「漏洞复现」百易云资产管理运营系统 comfileup.php 文件上传漏洞(XVE-2024-18154)

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…

武汉流星汇聚:亚马逊北美站引领中国跨境潮,全球商机触手可及

在当今全球跨境电商的浪潮中&#xff0c;亚马逊北美站以其独特的区域优势和强大的市场影响力&#xff0c;为中国跨境卖家提供了前所未有的发展机遇。根据最新统计数据显示&#xff0c;60%的中国跨境卖家将亚马逊视为他们海外拓展的首选平台&#xff0c;这一选择背后&#xff0c…

ASPCMS 漏洞

一、后台修改配置文件拿shell 登录后台后如下点击 点击保存并抓包 将slideTextStatus的值修改为1%25><%25Eval(Request(chr(65)))25><%25 放包&#xff08;连接密码是a&#xff09; 影响文件为 /config/AspCms_Config.asp 访问文件,使用工具连接