iOS-Senior14-Swift2

1.?和!的区别

在swift中,可选类型(?)其实质是一个枚举类型,里面有None和Some两种类型,其实nil的值相当于optional.None,没有值就相当于optional.None,如果有值就相当于optional.Some

//MARK: - !和?区别

1.解包

?:有值,没值(nil)

!:强制解包

eg: var number : Int? = 8

var number1 = number

print(number1)

注意:如果对没有值的变量进行强制解包的情况下回造成崩溃

2.可选绑定,不用强制解包

if var number2 = number {

print(number2)

}

//隐式解析可选类型:有值,没值

var intNumber :Int != 10

var intNumber1 = intNumber

print(intNumber1)

注意:如果!强制解析没值的变量,也会造成崩溃

可选绑定:

if var intNumber2 = number {

print(intNumber2)

}

//MARK: - 结构体

1.声明一个结构体

struct Rect {

//声明结构体变量的属性 (存储属性)

var x : Float

var y : Float

var width : Float

var height : Float

//声明结构体属性,要使用static

static var description : String ?

//声明一个计算属性(是用来专门计算结构体变量属性的setter的方法,和getter方法,其本身并没有存储功能)

var centerX : Float {

//set方法

set {

x = newValue

}

//get方法(必须的有)

get {

return x / 2

}

}

//声明方法

//声明一个结构体变量的方法(相当于oc中的实例方法)

func frameInfor () {

print ("x:\(x),y:\(y),width:\(width),height:\(height)")

}

//声明一个结构体方法(相当于oc中的类方法,使用static方法修饰)

static func infor() {

print("这是结构体方法")

}

}

//1.根据结构体去定义一个结构体变量

var frame = Rect (x:10,y:10,width:100,height:100)

//2.访问结构体变量中的属性

//注意:结构体变量的属性类型可以使用let去修饰,只不过访问的时候不能对其进行修改

print(frame.x)

frame.x = 20

print(frame.x)

//3.访问结构体属性

Rect.description = "我是结构体属性"

print(Rect.description)

//4.访问计算属性

frame.centerX = 200

//这句话就相当于在调用centerX的setter方法

let value = frame.centerX  //这句话相当于在调用center中的set方法

print(value) //这句话就相当于调用center中的get方法

frame.frameInfor() //调用结构体变量的方法

Rect.infor()  //调用结构体方法

//MARK: - 类(class)

class Person {

var name : String?

var age : Int?

//构造初始化方法

init(name : String age : Int) {

self.name = name

self.age = age

}

//自定义初始化方法

init(name : String) {

self.name = name

self.age = age

}

//自定义初始化方法

init(name : String) {

self.name = name

}

//声明类属性

static var introduce : String?

//计算属性

var lalue : Int {

set(a) {

age = a  //在写计算属性的时候,一定不能出现self,否则会造成死循环

}

get {

return age!

}

}

//声明一个类方法

//1.在类方法前边加上static修饰[虽然是一个类方法,但是该方法在子类中不能重写]

static func sayHi() {

print(introduce) //注意:在类方法中只能使用类属性,不能使用对象属性

}

//2.在方法前边加上class修饰[它是一个类方法,但是可以被重写]

class func sayHi1() {

print(introduce)

}

//声明一个实例(对象)方法

func sayHi2() {

print("hello,我是实例方法")

}

}

//创建对象[此时应该注意和oc区别开,实例对象,:后边跟的是类(注意:要初始化对象一定要写初始化构造的方法)]

var person1 : Person = Person(name : "MBBoy",age : 69)

//访问类中的属性

print(person.name!)

//属性后+?和不加+的区别就是输出的时候,是否用解包,带?的不用optional里的东西,就要用!解包,而不加问号的直接输出就可以

//3.访问类属性

Person.introduce = "我是xxxx"

//4.访问计算属性

person1.value = 28

print(person1.value)

//5.访问类方法

Person.sayHi()

Person.sayHi1()

//6.访问实例方法

person1.sayHi2()

//声明一个子类方法

class Student : Person {

//重写父类的方法

//重写类方法

override class func sayHi() {

print("我同桌是肉丝")

}

//重写父类中的实例方法

override func sayHi2() {

print("我同桌是肉丝的子类,重写了父类中的对象方法")

}

}

var student = Student (name : "rose",age : 38)

Student.sayHi1()

Student.sayHi2()

//MARK: - 值类型和引用类型的区别

//值类型

struct animal {

var name : String?

var age : Int?

init (name :String,age : Int) {

self.name = name

self.age = age

}

}

var dog = animal (name :"贝贝",age :3)

var dog1 = dog //此时将dog的数据拷贝给dog1

dog.name = "欢欢"

print("dog.name:\(dog.name),dog1.name:\(dog1.name)")

//结果:dog.name = "欢欢",dog1.name = "贝贝"

//引用值类型(可以用dog改变dog1)

class animal {

var name : String?

var age : Int?

init (name : String,age : Int) {

self.name = name

self.age = age

}

}

var dog = animal (name : "flower",age : 0)

var dog1 = dog

print ("dog.name :\(dog.name) , dog1.name : \(dog1.name)")

//MARK: - 协议

//当swift中声明协议的时候,协议里有可选方法需要使用@objc关键字修饰

@objc protocol MarryDelegate {

func cook() //吃饭

func wash() //洗衣服

optional func hitDouDou() //打豆豆

}

protocol DivorceDelegate {

func divideMoney()  //分割财产

}

//如果一个类要遵循协议的时候,如果这个类有父类,要在:后先写父类,然后要遵循的协议

class Man : Person,MarryDelegate,DivorceDelegate {

@objc func cook() {

print("还好去新东方学了几年厨师,终于可以大展身手了")

}

@objc func wash() {

print("还好有全自动洗衣机")

}

func divideMoney() {

print("分财产")

}

}

//创建一个男人

let man = Man(name :"fu",age :10)

man.cook()

man.wash()

man.divideMoney()

//MARK: - 扩展(extension)

//扩展协议中的相关方法(打豆豆)

extension Man {

@objc func hitDouDou() {

print("打你好爽")

}

}

man.hitDouDou()

//2.扩展还可以扩展类方法(给某一个雷添加方法,类似oc中的category类目)以及对象方法

extension Man {

//扩展一个对象方法

func sing() {

print("歌声嘹亮惹人醉")

}

//扩展一个类方法

class func sleep() {

print("多喝水,早点睡")

}

man.sing()

man.sleep()

//MARK: - 闭包

//求两个数的最大值

//使用闭包

var myBlock :((num1 : Int,num2 : Int) -> Int)

//第一种方式:

myBlock = {

(num1 : Int,num2 : Int) ->Int in //切记不能忘记in

return num1 > num2 ? num1 : num2

}

//第二种方式:

myBlock = {

num1,num2 in

return num1 > num2 ? num1 : num2

}

//第三种方式:

myBlock = {

num1,num2 in

num1 > num2 ? num1 : num2

}

//第四种方式:

myBlock: {

$0 > $1 ? $0 : $1

}

//第五种方式:

myBlock = {

(num1,num2) -> Int in

return num1 > num2 ? num1 : num2

}

let max = myBlock(num1 : 88,num2 : 66)

时间: 2024-12-10 09:42:44

iOS-Senior14-Swift2的相关文章

很好的iOS学习资料

https://github.com/vsouza/awesome-ios 汇集了很多好的资料 https://github.com/vsouza/awesome-ios Skip to content This repository Pull requests Issues Gist You don’t have any verified emails. We recommend verifying at least one email. Email verification helps ou

iOS高仿(swift2.2):花田小憩3.0.1

前言 断断续续的已经学习Swift一年多了, 从1.2到现在的2.2, 一直在语法之间徘徊, 学一段时间, 工作一忙, 再捡起来隔段时间又忘了.思来想去, 趁着这两个月加班不是特别多, 就决定用swift仿写一个完整项目. 花田小憩:是一个植物美学生活平台, 以自然生活为主导, 提倡植物学生活方法, 倡导美学标准的生活态度的一个APP. 个人文字功底有限, 就我而言, 这款APP做的挺唯美的- github地址 github地址 如果对您有些许帮助, 请star ? 声明 此花田小憩项目里面的都

(IOS)Swift2.0 Radio 程序分析

本文主要分享下楼主在学习Swift编程过程中,对GitHub上的一个开源项目Swift Radio的研究心得. 项目地址:https://github.com/swiftcodex/Swift-Radio-Pro 一.界面 在这个项目中一共包含了6个界面控制器,其中包含了5个用于分别显示电台频道(Swift Radio).正在播放(Now Playing View).电台信息(Info View Controller).app信息(Menu View Controller)和app特征及联系邮箱

iOs 自定义UIView 日历的实现 Swift2.1

学习Swift有一个月了,动手写一个UIView吧. 所有源代码在最后,直接用就可以了,第一次写Swift,和C#,Java还是有区别的 (博客园可以考虑在代码插入中添加Swift的着色了) 1  函数准备.Swift的日历函数,随着版本的变化,变动很大. //MARK: - Calendar //按照苹果的习惯,周日放在第一位 let weekdayForDisplay = ["周日","周一","周二","周三",&quo

iOS开发——MVC详解&Swift+OC

MVC 设计模式 这两天认真研究了一下MVC设计模式,在iOS开发中这个算是重点中的重点了,如果对MVC模式不理解或者说不会用,那么你iOS肯定学不好,或者写不出好的东西,当然本人目前也在学习中,不过既然能看到这篇文档,说明你已经开始着手学习并且想深入研究它了,个人也是研究很久才搞懂,就写下来希望对各位有用,也能方便自己以后开发中查看,好了废话不多说,下面就来详细介绍一下MVC,并且用实例验证一下在项目开发中怎么去使用它. 相信你对 MVC 设计模式 并不陌生,只是不能完全理解其中的含义或者不能

自己总结的 iOS ,Mac 开源项目以及库,知识点------持续更新

自己在 git  上看到一个非常好的总结的东西,但是呢, fork  了几次,就是 fork  不到我的 git 上,干脆复制进去,但是,也是认真去每一个每一个去认真看了,并且也是补充了一些,感觉非常棒,所以好东西要分享,为啥用 CN 博客,有个好处,可以随时修改,可以持续更新,不用每次都要再发表,感觉这样棒棒的 我们 自己总结的iOS.mac开源项目及库,持续更新.... github排名 https://github.com/trending,github搜索:https://github.

《互动教程 for Xcode7 & Swift2》已成功发布在App Store

不看视频不看书,超级好玩的Xcode教程 利用手指来互动式学习Xcode7 单击.双击.长按.拖动及Xcode7各种快捷键,就像您在真正的Xcode7上操作一样 无痛上手,比观看视频.阅读书籍更加有趣.更加有效的学习方式  变被动学习为主动学习,真正的iOS开发一点通,是您学习iOS移动开发的最佳方式 下载地址:https://itunes.apple.com/cn/app/hu-dong-jiao-cheng-for-xcode7/id1063100471?mt=8 [互动教程 for Xco

github每日精选---iOS版

这里收录了2015年11月1日以来的githubOC排行版的框架,在此之前,已有前人收录的许多iOS开发框架,可以先参考: 4个优秀的总结: ?Github-iOS备忘 (国人总结的上百个Github上的开发框架和完整App) http://github.ibireme.com/github/list/ios/ ?不少优秀的 iOS, Mac 开源项目 https://github.com/Tim9Liu9/TimLiu-iOS ?iOS开源库 (总结的时间稍早一点,但很全) http://ww

iOS开发 非常全的三方库、插件、大牛博客等等

UI 下拉刷新 EGOTableViewPullRefresh- 最早的下拉刷新控件. SVPullToRefresh- 下拉刷新控件. MJRefresh- 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.具体使用看"使用方法". (国人写) XHRefreshControl- XHRefreshControl 是一款高扩展性.低耦合度的下拉刷新.上提加载更多的组件.(国人写) CBStoreHo

IOS学习之路——Swift语言(1)——基本类型、运算符与逻辑控制语句

一.变量 变量标识符必须以字符包括Unicode编码字符.美元字符$.下划线_开头,不能以数字开头,不能包含空格.更不能使用关键字命名. swift中变量的声明使用var关键字,常量的声明使用let关键字. 1 var name="Swift"; 2 var version=2.2; 3 let company:String="Apple"; 变量的声明: 1. 可以使用,逗号分割变量来同时声明多个变量 2. 可以使用:类型来同时指明多个变量的类型 在Mac中可以使