《移动电子商务及应用》课件-17. iOS移动商务应用开发_第1页
《移动电子商务及应用》课件-17. iOS移动商务应用开发_第2页
《移动电子商务及应用》课件-17. iOS移动商务应用开发_第3页
《移动电子商务及应用》课件-17. iOS移动商务应用开发_第4页
《移动电子商务及应用》课件-17. iOS移动商务应用开发_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

iOS移动商务应用开发

学习目标学习和掌握iOS平台的Swift编程语言能够运用Swift进行iOS用户界面的设计学习内容iOS平台开发初步Swift编程之可选类型与协议Swift编程之闭包iOS手机应用界面开发学习进度

iOS平台简介

编写第一个Swift程序什么是iOS?iOS(原名iPhoneOS,自iOS4后改名为iOS)是苹果公司为移动设备所开发的专有移动操作系统。与Android不同,iOS不支持任何非苹果的硬件设备。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续用到iPodtouch、iPad以及AppleTV等产品上。iOS与苹果的MacOSX操作系统一样,属于类Unix的商业操作系统。iOS发展简史2007:第一个iOS版本,提出为它提供软件支持。iPhone1上市。2008:操作系统系统取名为iPhoneOS,AppStore出现。iPhone3G上市。2010:iPhoneOS改名为iOS,增加双击Home键跳转应用。iPhone4上市。2011:iOS5(iPhone4),发布,增加iCloud,新的iMessage和通知中心。iPhone4s上市。2013:iOS7(iPhone5),扁平化设计,增加TouchID允许通过指纹识别来解锁设备。2014:iOS8(iPhone6),增加在Mac上也可以阅读和编辑iMessages。2016:iOS10(iPhone7),增加家庭App,通知可直接显示图片和视频。2017:iOS11发布,增加对AR的支持,提供ARKit。iPhoneX/8/8plus上市。iOS发展简史iOS系统架构iOS系统分为可分为四级结构,由上至下分别为可触摸层(CocoaTouchLayer)、媒体层(MediaLayer)、核心服务层(CoreServicesLayer)、核心系统层(CoreOSLayer),每个层级提供不同的服务。低层级结构提供基础服务如文件系统、内存管理、I/O操作等。高层级结构建立在低层级结构之上提供具体服务如UI控件、文件访问等。iOS系统框架可触摸层(CocoaTouchLayer)UIKit(界面相关)EventKit(日历事件提醒等)NotificationCenter(通知中心)MapKit(地图显示)AddressBook(联系人)iAd(广告)MessageUI(邮件与SMS显示)PushKit(iOS8新push机制)媒体层(MediaLayer)图像引擎(CoreGraphics、CoreImage、

CoreAnimation、OpenGLES)音频引擎(CoreAudio、AVFoundation、OpenAL)视频引擎(AVFoundation、CoreMedia)核心服务层(CoreServicesLayer)CFNetwork(网络访问)CoreData(数据存储)CoreLocation(定位功能)CoreMotion(重力加速度,陀螺仪)Foundation(基础功能如NSString)Webkit(浏览器引擎)JavaScript(JavaScript引擎)核心系统层(CoreOSLayer)内核服务(sockets、I/O、内存、文件等)本地认证(指纹识别验证等)安全(证书、公钥、密钥等接口)加速器(执行DSP运算)iOS开发环境Mac

OS系统Xcode工具苹果电脑macOS10.15+Xcode11.1+iOS开发环境Xcode是苹果公司开发的功能强大IDE,从编辑代码、运行、调试、打包应用等所有功能。Xcode可以编写多种编程语言C、C++Objective-CJavaSwift在Mac上打开MacAppStore应用程序,搜索Xcode即可下载。iOS开发环境通过AppStore下载和安装XcodeSwift与Objective-C语言对比

都是基于Cocoa和CocoaTouch框架相同点1、文档结构2、语法内容不同点Swift与Objective-C语言对比文档结构Objective-CSwiftSwift与Objective-C语言对比Swift支持面向协议编程、函数式编程、面向对象编程,OC仅支持面向对象编程Swift采取值类型,OC支持指针和引用Swift容易阅读,文件结构和大部分语法简易化Swift中的泛型、元组类型更加方便和通用Swift是动态类型的强类型语言,数据类型可以由编译器推断,运行时不可改变语法内容学习进度

iOS平台简介

编写第一个Swift程序学习内容案例

编写第一个Swift程序了解Swift的两个编程环境学习使用XcodePlayground进行Swift程序开发掌握Swift编程的基础知识注释常量与变量的定义基本数据类型这一部分将通过一个案例学习以下内容。Swift编程环境编程环境XcodeXcodePlayground平台支持MacOS、iOS、tvOSMacOS、iOS、tvOS编程语言Swift,Objective-C,othersSwift适用范围实际项目开发原型开发、学习和实验创建Playground项目建立Playground项目建立Xcode项目创建Playground项目编写一般的Swift程序可选择Blank模板运行系统的选择为iOSPlayground集成开发环境点击三角形的ExecutePlayground按钮即可获得执行结果可控制开启关闭左右和下侧面板几个基本知识点多行注释/*注释的内容*/单行注释//注释的内容

输出函数print()例如:print(“test”)常量的定义使用关键字let例如:leta=1+2变量的定义使用关键字var例如:varstr=“Hello” 程序代码编写规范Swift要求程序代码编写工整规范,推荐利用空格确保代码编写美观不正确的空格运用不但影响代码美观,编译器还会给出错误正确设置好程序代码中空格,即可消除此类出错信息数据类型推断没有指定数据类型,Swift通过数据类型推断自动选择合适的类型按下Alt并在变量上点击鼠标即可查看变量的数据类型基本数据类型Int

整数Uint

无符号整数Float

浮点数Double

双精度浮点数Bool

布尔类型String

字符串Character

字符Optional

可选类型(可以有值或无值)用法示例:let

age=18//age被推断为Int类型let

year:Int=20//直接指定数据类型程序输出Playground开发环境能够可视化常量和变量的内容程序的输出可采用print()函数调试区域可查看程序输出可视化区域可查看常量和变量的内容分号的使用Swift语句末尾无需放置分号;若需要在一行内编写多行语句,则必须在语句间放置分号;print(str);print(b)print(str)print(b)以下两种写法是等价的:小结Playground集成开发环境是一个编写和验证iOS应用设计的利器编写Swift程序应注意代码的工整和规范性学习内容iOS平台开发初步Swift编程之可选类型与协议Swift编程之闭包iOS手机应用界面开发学习进度这一部分将学习Swift编程中的几个核心概念

可选类型

协议什么是可选(Optional)类型?可选类型用于处理可能出现值缺失的情况没有初始值的可选变量为nil,表示没有值将数据类型名之后加(?)即变为可选类型,例如:var

a:

Int? //可选的整数变量avar

str:

String?

//可选的字符串str可选类型有什么用处?传统的编程语言C、Objective-C等没有可选类型新型编程语言如Swift程序中经常会出现可选类型看以下程序例子:let

a="123"let

b=Int(a)print(b)Optional(123)运行结果通过Int()函数强制转换为整数可能会失败,因此将b推断为可选的Int?更加合理从可选类型获取实际数据可选类型常(变)量名后加(!)表示强制解包来获取实际数据let

a="123"let

b=Int(a)print(b)print(b!)Optional(123)123运行结果强制解包可选类型定义可选类型变量时在原有数据类型后加(?)通过(变量名!)可强制解包可选类型字符串为nil运行结果var

x:String?=nil//定义可选类型变量xif

x

!=

nil{

print(x!) //强制解包x

}else

{

print("字符串为nil")}可隐式解包的可选类型(ImplicitlyUnwrappedOptional)可隐式解包的可选类型,简称隐式可选类型定义一般可选类型是在类型名后加(?)

var

x:String?定义隐式可选类型是在类型名后加(!)

var

y:String!使用隐式可选类型var

y:String!=“Swift”//定义隐式可选类型变量yif

y

!=

nil{

print(y)

print("Hello,"+y)

print(y!)}else

{

print("字符串为nil")}Optional("Swift")Hello,SwiftSwift运行结果隐式可选类型在参与运算时自动解包,无需进行强制解包参与运算时隐式解包可选类型绑定(OptionalBinding)条件判断时将可选类型的值赋给临时变量的过程称为可选类型绑定。if语句中,要在if后增加let实现临时变量与可选类型值的绑定var

myString:String?=String(123)if

letstr=myString

{

print(myString)

print(str)}else{

print("myString值为nil")}Optional("123")123运行结果str绑定了实际的值123可选类型小结没有初始值的可选变量为nil可选类型包括将数据类型名之后加(?)或(!)两种可选类型变(常)量名后加(!)为强制解包定义时在数据类型名之后加(!)则为隐式可选类型可以采用iflet的形式对可选类型进行解包学习进度可选类型

协议什么是协议(Protocol)?协议是用于约定某种功能所需要的方法和属性的集合。满足协议要求的数据类型称为遵循(Conform)该协议:类结构体枚举遵循协议的数据类型需具体实现协议规定的方法和功能。协议的用法定义一个协议protocol

SomeProtocol

{//协议内容}结构体可以遵循协议struct

SomeStructure:FirstProtocol,AnotherProtocol{//结构体内容}类的继承关系要放在遵循的协议之前class

SomeClass:

SomeSuperClass,FirstProtocol,AnotherProtocol{//类的内容}协议规定的属性若协议规定了属性,则遵循该协议的数据类型必须实例化该属性协议要求属性必须明确其读写属性{getset}示例:protocol

ProtocolA

{

var

id:Int

{

get

set

}

var

name:String{

get

}}案例:一个简单的协议下面以一个简单的案例说明结构体和类如何遵循协议。首先声明一个同时具有属性和方法协议,如下:protocol

Named{

var

name:String{get}

func

showFullName();}示例1:遵循Named协议的结构体Person(name:"AbrahamLincoln")AbrahamLincolnAbrahamLincoln运行结果:protocol

Named{

var

name:String{get}

func

showFullName();}struct

Person:Named{

var

name:String

func

showFullName(){print(name)}}let

person=Person(name:"AbrahamLincoln")print(person);print(person.name);person.showFullName()示例2:遵循Named协议的类Product卡罗拉initiatedToyota卡罗拉Product凯美瑞initiated凯美瑞运行结果:class

Product:Named

{

var

brand:String?

var

name:String

init(name:String,brand:String?=nil){

self.name

=name;self.brand

=brand

print("Product\(self.name)initiated")}

var

fullName:String{

return

(brand

!=

nil?brand!+

"":"")+

name

}

func

showFullName(){print(fullName)}}var

product1

=Product(name:"卡罗拉",brand:"Toyota")product1.showFullName()var

product2=Product(name:"凯美瑞")product2.showFullName()多Swift文件的项目文档结构以上介绍中是在Playground默认页中直接编写程序并进行编译运行。实际的项目往往由多个程序构成,因此项目中必然有多个Swift文件。以示例2中遵循Named协议的类为例,分解为以下Swift文件:在Playground默认页中运行类的实例化代码,将协议的定义放置在protocol.swift文件中,Product.swift中放置Product类。protocol.swiftProduct.swiftPlayground默认页多个Swift文件的项目文档结构打开左侧的项目文档,在Sources文件夹上点击鼠标右键新建两个swift文件并重命名为protocol.swift和Product.swift多Swift文件的项目文档结构在Swift项目中可以直接使用本项目文档的自定义内容不需要import等操作,这与C/Java等一些传统编程语言有区别这一特点符合Swift简洁方便的使用特性多Swift文件的项目文档结构由于Product类需要被外部文件引用,因此必须声明为public同理方法showFullName()也需要声明为public协议技术小结可以通过定义协议约定公共的属性和方法结构体、类、枚举等类型在定义时均可以选择遵循协议遵循协议意味着必须实现协议约定的属性和方法协议要求属性必须明确其读写属性{getset}本小节还介绍了多文件项目文档结构的使用方法学习内容iOS平台开发初步Swift编程之可选类型与协议Swift编程之闭包iOS手机应用界面开发什么是闭包(Closure)?闭包是可以在代码中被传递和引用的独立代码块。闭包可以从上下文推断参数闭包可以作为函数的参数进行传递一个简单的Swift函数letx=1funcplus_one(a:Int)->Int{

returna+1}print(plus_one(a:x))运行结果:2函数由关键字func定义函数参数的写法为param:Type函数返回值的写法为:->Type函数调用时原有的形参不能省略写成闭包的形式let

x=1lety={x+1}letz={returnx+1}print(y())print("x+1="+String(z()))print(“\(x)+1=\(z())")这里y和z都是闭包,只有一行语句时可省略return关键字调用时闭包的名字相当于函数名在字符串中插入值可以通过

\(常量、变量、表达式)这样的语法利用String()函数将Int转为String,只有两个String类型的值才能用+号连接闭包里x的类型和值通过上下文推断获取写成闭包的形式let

x=1lety={x+1}letz={returnx+1}print(y())print("x+1="+String(z()))print(“\(x)+1=\(z())")2x+1=21+1=2运行结果案例实现一组字符串的反向排序定义字符串数组常量names如下:let

names=["Alex","Bob","Texas","Handson","April“]要实现其反向排序,结果如下:["Texas","Handson","Bob","April","Alex"]方法1函数funcreverse(s1:String,s2:String)->Bool{returns1>s2}letnames=["Alex","Bob","Texas","Handson","April"]varresult=names.sorted(by:reverse)print(result)运行结果:["Texas","Handson","Bob","April","Alex"]方法2闭包表达式闭包表达式是一种利用简洁语法构建内联闭包的方式。

闭包表达式的一般形式本例中反向排序的闭包表达式{

(parameters)

->

(return

type)

in

statements}result=names.sorted(by:{(s1:String,s2:String)->Bool

in

return

s1>s2})方法3闭包表达式的化简标准的闭包表达式

通过语境推断类型来化简闭包表达式单行表达式可以隐式返回result=names.sorted(by:{(s1:String,s2:String)->Bool

in

return

s1>s2})result=names.sorted(by:{s1,s2in

returns1>s2})result=names.sorted(by:{s1,s2in

s1>s2})方法4闭包的简写参数名表达式简化的闭包表达式Swift可以自动对行内闭包通过简写的参数名进行调用,同时in关键字也可以省略,直接通过$0,$1,$2来顺序调用闭包的参数result=names.sorted(by:{s1,s2in

s1>s2})result=names.sorted(by:{$0>$1})方法5尾随闭包(TrailingClosure)简写参数名表达式

尾随闭包是写在函数形式参数的括号后的闭包表达式尾随闭包的进一步精简result=names.sorted{$0>$1}result=names.sorted(by:{$0>$1})result=names.sorted(){$0>$1}完整的程序import

UIKitlet

names=["Alex","Bob","Texas","Handson","April"]var

result=names.sorted{$0>$1}print(result)运行结果:["Texas","Handson","Bob","April","Alex"]利用闭包为属性赋值闭包可以为结构体、类等数据结构的属性进行赋值class

Product

{

var

brand:String?

var

name:String

init(name:String,brand:String?=nil){

self.name

=name;self.brand

=brand

print("Product\(self.name)initiated")}

var

fullName:String{

return

(brand

!=

nil?brand!+

"":"")+

name

}}var

product1

=Product(name:"卡罗拉",brand:"Toyota")var

product2=Product(name:"凯美瑞")print(product1.fullName);print(product2.fullName)Product卡罗拉initiatedProduct凯美瑞initiatedToyota卡罗拉凯美瑞运行结果:类的初始化方法随着实例的创建自动执行利用闭包为fullName属性赋值可选类型允许为nil闭包技术小结闭包可以从上下文推断参数闭包可以作为函数的参数进行传递可以直接通过$0,$1,$2来顺序调用闭包的参数可以利用闭包为属性赋值学习内容iOS平台开发初步Swift编程之可选类型与协议Swift编程之闭包iOS手机应用界面开发SwiftUI技术SwiftUI是苹果在“WWDC-2019”推出的“声明式UI”框架SwiftUI具有简洁即视等特点,支持iOS、iPadOS、macOS、watchOS开发环境要求Xcode:Xcode11.1+MacOS:MacOS10.15+iOS:iOS13+何为声明式编程?老版本的iOS采用“指令式”(Imperative)编程,需要告诉计算机“怎么做”把每个Frame、Layout等都要计算到位“声明式”(Declarative)编程采取的是告诉计算机“做什么”不需要关心最底层怎么做直接描述想要的效果,剩下的由系统框架自动完成SwiftUI的基本组件名称含义Text用来显示文本的组件,类似UIKit中的UILabel。Image用来展示图片的组件,类似UIKit中的UIImageView。Button用于可点击的按钮组件,类似UIKit中的UIButton。List用来展示列表的组件,类似UIKit中的UITableView。ScrollView用来支持滑动的组件,类似UIKit中的UIScrollView。Spacer一个灵活的空间,用来填充空白的组件。Divider一条分割线,用来划分区域的组件。VStack将子视图按“竖直方向”排列布局。(Verticalstack)HStack将子视图按“水平方向”排列布局。(Horizontalstack)ZStack将子视图按“两轴方向均对齐”布局(居中,有重叠效果)设计案例:一个演示性的成绩查询系统创建Xcode项目创建Xcode项目Xcode集成开发环境启动编译和运行此处可选择和更换iPhone模拟器的设备类型主要项目文档建立项目以后,会自动生成以下几个主要的项目文档文件:主窗口定义文件ContentView.swift应用代理文件AppDelegate.swift场景代理文件SceneDelegate.swift主窗口定义文件ContentView.swiftiPhone模拟器:用于展示项目的运行结果ContentView结构体设置了主窗口预览设备:用于展示左侧代码窗口所显示程序的预览结果(对设置了PreviewProvider的界面有效)设置预览内容为主窗口ContentView自身思考:body,previews应该是一个属性,而且这里还用了闭

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论