5 分钟,带你快速撸一个 iOS App

本文介绍了如何使用Swift和SwiftUI为Python爬虫构建iOS原生App。首先,讲解了设置Xcode开发者账号和创建iOS项目的基本步骤。接着,通过一个登录页面实例,展示了SwiftUI中布局、控件使用以及网络请求库Alamofire的集成方法。在页面布局中,使用了VStack、TextField、Toggle和Button等元素。最后,演示了如何处理点击事件,进行网络请求并显示结果。这是一个快速入门iOS开发的好教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 前言

使用 Python 写完爬虫后,有时候我们需要在手机上实时对爬虫进行调度,或实时展示爬虫的结果

面对这种场景,我们可以将爬虫逻辑写成 API 部署到服务器,然后在移动端编写 App,通过界面元素控件直接调用接口即可

本篇文章,将和大家聊聊如何快速编写一款 iOS 原生 App

2. 准备

要实现原生 iOS 应用,我们需要在 Mac 上使用 Xcode 编写并进行编译

首先,设置 Xcode 的开发者账号

打开 Xcode,左上角选择 Xcode - Preferences - Accounts,点击左下角的 + 号,添加一个开发者账号

7541b1325d88261df49bda2b92f83ee7.png

然后,使用 Xcode 创建一个项目

这里模版选择 iOS App,输入项目名称,编程语言选择「 Swift 」,点击下一步完成项目的创建

f09022ee3c63f3bcecb63f73d146f88e.png

PS:Swift 相比 OC,语法更加简洁明了

最后,为新创建的项目指定 Sign 签名

这部分如果有疑惑,可以点击文末的阅读原文去了解

3. 实战

实战部分,我们以一个简单的登陆页面来进行讲解

3-1  安装依赖库 

由于项目使用 Swift 开发,这里推荐使用 SPM( Swift Package Manager )来安装依赖

比如,网络请求库「 Alamofire 」

项目地址:https://github.com/Alamofire/Alamofire

安装方式:File - Swift Packages - Add Package Dependency - 输入项目地址( Github / Gitee )- 选择安装版本

21cbeb951b4d3c04ea894b43455c02cf.png

3-2  页面布局

打开项目根目录下的「 ContentView.swift 」文件,在 body 下编写具体的视图

首先,使用 VStack 定义一个垂直的布局盒子,并定义子控件水平居中展示

PS:SwiftUI 常见的 3 种布局方式为 VStack、HStack、ZStack,它们分别代表垂直布局、水平布局、深度布局

import SwiftUI
import Combine

struct ContentView: View {
    
    ...
    
    //构建页面View
    var body: some View {
        VStack(alignment: HorizontalAlignment.center){
           ...
        }
    } 
}

然后,子元素依次添加一张本地图片、两个输入框、一个选择框、一个按钮

其中,

  • 图片控件 Image

  • 文本输入框控件 TextField

  • 选择框控件 Toggle

  • 按钮控件 Button

import SwiftUI
import Combine

struct ContentView: View {
    
    //构建页面View
    var body: some View {
        VStack(alignment: HorizontalAlignment.center){
            Image("WechatIMG5")
            
            TextField("用户名", text: $username).textFieldStyle(RoundedBorderTextFieldStyle())
                .keyboardType(.numberPad)
                .padding()
            
            TextField("密码", text: $pwd).textFieldStyle(RoundedBorderTextFieldStyle())
                .keyboardType(.numberPad)
                .padding()
            
            //是否为测试
            Toggle(isOn: $isFavorited) {
                Text("测试环境")
                }.padding(.leading, 0.0).frame(width: 140, height: 40)

            Button(action: {
                //具体的操作         }       struct ContentView_Previews: PreviewProvider {
        static var previews: some View {
            ContentView()
        }
    }   
    
}

最后,定义变量和控件数据进行双向绑定

struct ContentView: View {
    
    @State  var username:String = "用户名"
    @State  var pwd:String = "密码"
    @State  var result:String = "结果"
    @State  var isFavorited:Bool = false
        
}

3-3  网络请求及结果展示

为 Button 控件设置点击事件,使用 Alamofire 进行网络请求,最后将结果展示写入到结果控件绑定到数据中去即可

Button(action: {
                //具体的操作
                print("start")
                
                var url = ""
                
                if(self.isFavorited){
                   url = "...?username=" + self.username + "&password=" + self.pwd
                }else{
                   url = "...?username=" + self.username + "&password=" + self.pwd
                }
                
                print("请求地址:"+url)
                
                AF.request(url).responseJSON { response in
                    switch response.result {
                    case .success(let json):
                        //转为Dictionary
                        let post_paramsValue = json as! Dictionary<String,Any>
                        
                        //__NSCFString
                        let msg = post_paramsValue["msg"]!
                        //转为String
                        let msg_pro = msg as! String
                        
                        self.result = msg_pro
                        
                        break
                    case .failure(let error):
                        print("error:\(error)")
                        self.result = "网络异常,请稍后再试!"
                        break
                    }
                }
                
            }) {
                Text("一键执行")
                    .foregroundColor(Color.white)
                    .padding(10)
                    .background(Color.gray)
                    .cornerRadius(6)
                    .padding(10)
                    .frame(alignment: .center)
            }
            
            TextField("结果区域", text: $result)
                .padding()
        }

4. 最后

文章通过一个简单的例子描述了开发一个 iOS 原生应用的详细步骤;实际应用中,可以结合具体的场景去定制开发不同的功能模块

-------- End --------

5b376b6378b8d4052012d1d5b705426d.jpeg
精选内容
7a1024cdad9e266cf9d195db44544757.jpeg 56f74bad8a8d25aabd42486a5f3f8739.jpeg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值