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

1. 前言

大家好,我是安果!

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

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

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

2. 准备

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

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

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

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

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

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 )- 选择安装版本

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 原生应用的详细步骤;实际应用中,可以结合具体的场景去定制开发不同的功能模块

(0)

相关推荐

  • 苹果在iOS 13中大量使用Swift:比iOS 12翻了一倍不止

    苹果在WWDC 2014 中引入了Swift编程语言,作为未来在苹果平台上进行编程的语言.2015年,苹果在iOS 9上发布了第一款基于Swift编程语言的第一款应用,内置的计算器App:在这之后,使 ...

  • 三分钟带你快速了解白茶

    茶农茶舍 教你品茶,识茶,泡茶,习茶道五境之美.喝好茶加微V信:1930402313 33篇原创内容 公众号 白茶是是汉族茶农创制的传统名茶,是我国的六大茶类之一,指一种采摘后不经杀青或揉捻,只经过晒 ...

  • 10分钟带你快速入门JavaScript

    Javascript,从"最被误解的语言",最后神奇地转变成为"最流行的语言",证明它经受得起时间的考验.虽然单独来看,它的交互设计有些失败,但是加上Ajax的 ...

  • 3分钟带你快速打通私域流量,抢先同行推动大促活动爆发

    分享不断诚意满满.大家好,我是大人物,你们的人物哥!又见面了! 期待了这么久的618终于来了,大家61的战绩如何?我操作的这家店爆发还算不错,一天有6W+访客50W+的销售额.不过优化调整不能松懈,后 ...

  • 90分钟带你快速掌握【屋面排水设计】

    屋面排水设计是施工图设计的重要组成部分之一,为了排除屋面雨水,需有周密的排水计划,包括:选择屋顶排水坡度.确定排水方式.进行屋顶排水组织设计. 今天给大家简单聊一聊屋面排水方式 ▽ 屋面排水方式主要有 ...

  • 赶紧收藏丨1分钟带你快速掌握兵乓球35种打法

    每个领域都有自己比较成型的术语,乒乓球也一样.我开始学习的时候,就发现乒乓球术语的含义非常丰富,经常搞错,也一直被其困扰.这段时间看了自己以前收集的术语问题,发现自己对于大部分术语已经有所体会,故此按 ...

  • 网红SUV探歌到底怎么样?十分钟带你快速体验

    一直以来,15到20万价位的SUV几乎是整个细分市场里竞争最为激烈的区域.能够长期留在这个价位区间,并保持不错销量的产品,基本都是各家品牌的战略主打. 在前不久,又有一款重量级产品闯入了该区间,以不同 ...

  • 3分钟带你快速解读「休闲农业」

    休闲农业是乡村振兴发展的新方向,未来很多投资者也会纷纷介入,是现在非常关注的热门话题. 那么发展休闲农业,到底应该注意什么? 今天为大家简单梳理一些知识要点,希望能有所帮助. 01 休闲农业用地的3种 ...

  • 一分钟带您快速get脆性糖尿病!

    一分钟 · 小问答 你知道吗? 脆性糖尿病常可见于以下哪类糖尿病患者(  )多选 A.1型糖尿病患者 B.血糖控制较好的新诊断2型糖尿病患者 C.胰岛功能近乎衰竭的晚期 2 型糖尿病患者 D.妊娠糖尿 ...

  • DNF:不知道希洛克选哪套?1分钟带你快速看懂

    作者:菡少 奥兹玛上线后掀起新一轮的打团热潮,各位勇士们是不是还在烦恼因希洛克装备被拒之门外?不慌!今天就全方位.多角度解析一下希洛克装备,助力各位勇士光速毕业. 希洛克装备分为两大类共计16件: 第 ...