Swift-MJ

1.声明变量 常量

声明变量:var age = 10

声明常量:let age = 10 (不加分号,除非多条语句写在同一行)

二进制前缀:0b(必须小写)

八进制前缀:0o

十六进制前缀:0x

2. 基本数据类型:

Int Float Double Bool  Character String Array Dictionary Tuple(元组类型) Optional(可选类型)

Swift中的中包括有符号整型和无符号整型

字符串:@"abc\(x)"  x为一个整型数据或其他:在Swift中没有stringWithFormat的用法  用\()代替

1> 定义一个指定类型的变量/ 常量,如下格式:

let age: Int = 10

2> Swift中的小数默认为Double型,需要自行设置为Float

3> Swift强调语法安全:不同类型的两个变量 不能相加

4> 浮点数可以用十进制和十六进制表示

十进制表示浮点数:eN:10的N次方

// 没有指数时
let d1 = 12.5
// 有指数
let d2 = 0.125e2

十六进制表示浮点数:pN:2的N次方   d3 = (8/16 + 12) * 1 = 12.5

let d3 = 0xC.8p0
// d3 = 0xC.8 * 2的0次方 = 12.5

3. Swift运算符:

1> 赋值=:

Swift可进行多个赋值:

基本的逻辑运算都一些样 强调赋值运算符:

= OC中的赋值运算符有返回值if(x = y)为永真

Swift中这种写法属于语法错误,Swift中=没有具体返回值

2> 取余运算%:

Swift可以对浮点型数据进行取余运算

a % b 结果所得余数的正负和a的符号一致

3>比较运算符:

Swift中的if语句必须是Bool型   true为真 false为假  没有C语言中非0为真的说法

三目运算符中的条件也必须是Bool型的  比较运算符和逻辑运算符的返回值为true 和 false两种(不是1 0)

4> 范围运算符(Swift新增)

a...b:范围是:[a, b]

a..<b: 范围是:[a, b)

Swift中的for循环:

for i in 0...5 {
// 执行6次 :0 1 2 3 4 5
}

5> 溢出运算符:

&+ &- &/ &* &%

上溢出:最大值+1结果为0  下溢出:最小值-1结果为最大值

4. Swift新增的特殊数据类型:

1> 元组类型Tuple:

定义:有N个任意类型的数据组成

let po = (x : 12.6, y : 18 ) -----> x y是元素

例:

var point = (x : 10.3, y : 5)
/**
   *获取元组类型中的元素:
    *point.x  point.y
    * point.0(获取x) point.1(获取y)
**/ 

用let定义一个元组之后,不可以改变其中元素的值

下面语句错误:指定元素类型之后 不能加上元素的名称:

var person:(Int ,String) = (age : 23, name : "ha")

元组中:下划线可以忽略某个元素的值,以便取出其他的元素值

6. 分支语句 循环语句:

for ,while ,do while ,if都与OC中一样

注:这些语句后面必须加{}

1> for in:

for i in 1...4 {
// 如果不使用i 可以用下划线_替换i
}

2> switch:

在Swift中:switch case后面不需要加break

每一个case与语句后面必须加内容,不能为空的

1》switch多条件匹配:

case0, 1, 2:(满足三个条件中的一个 用逗号分割即可      C语言中多条件表示:case 0: case 1: case 2:  --> 比较麻烦 )

2》switch范围匹配:

case 0...3:      case 4...10:etc

3》switch匹配元组:

例:一个中心在原点:边长为4的正方形:判断一个点是否在这个矩形框中:

let point = (1, 1)
switch point {
case (0, 0):
// x可以为任意值:x轴点
case (_, 0):
// 在矩形框中:
case (-2...2, -2...2):
}

4》case数值绑定:

可以将switch中的值绑定给一个特定的常量或者变量,以便在case里面的语句中使用这个值

注:fallthrough后面的case语句不能定义变量和常量:例如case let (x, y) where x == y

let point = (10, 0)
switch point {
// 只要某个点的y值满足为0 就可以走下面的语句,然后获取x的值 可以进行其他的操作
case (let x, 0):
// 任意一个点都会走
case let (x, y):
}

5》switch中添加where语句:

case let (x, y) where x == y :

6》fallthrough:

作用:执行完当前的case语句,会接着执行fallthrough后面的case或者default语句(相当于C语言中没有加break语句)

7. 加标签:

out : for _ in 1...2 {
     for _ in 1..3 {
        print("ha")
        // break原本只能跳出内层循环    可以通过加标签 跳出外层循环
        break out
     }
     print("kk")
}

8. 函数:

1> 函数定义:

func 函数名(形参列表) -> 返回值类型 {

函数体

}

形参列表:形参名1: 形参类型1, 形参名2:,  形参类型2

无返回值:

func 函数名(形参列表) -> ()

func 函数名(形参列表) -> Void

func 函数名(形参列表)

2> 外部参数名:

使用外部参数名的目的:就是在分不清每个形参的意义时 可以通过外部参数名提示

如下:Age   Number就是外部参数名

格式:外部参数名写在形参名前面 用空格隔开

func HA(Age age : Int, Number num : Int) {

}

// 调用方法:

HA(Age: 10, Number: 34)

3> 默认参数值:

在形参前面加#相当于生成一个与当前形参同名的外部参数名

func add(name : String, age : Int = 20){

}

// 存在默认参数的时候,Swift会自动给它生成一个跟形参名相同的外部形参名,  调用方法的时候需要将参数名写出

add("haha", age: 32)

在带有默认参数值的形参名前面写一个下划线:_  在方法调用的时候就不用写外部参数了

func add(name : String, _ age : Int = 20){

}

// 存在默认参数的时候,Swift会自动给它生成一个跟形参名相同的外部形参名,  调用方法的时候需要将参数名写出

add("haha",  32)

4> 常量参数和变量参数:
默认情况下,函数的参数都是常量参数, 不能在函数内部修改

如果需要在函数内部对参数进行修改,需定义为var

5> 输入输出函数:

swift中想要修改函数内部局部变量的值,利用输入输出函数

输入输出函数定义:

func swap (inout num1 : Int, inout num2 : Int)

注:不利用第三个变量的前提下,交换两个变量的值:一:异或运算   二:和 差

a. 传递实参的时候,必须在实参的前面加上&

b. 不能传入常量或者字面量(例:12)作为参数值,

c. 输入输出参数不能有默认值 不能使用let var修饰(inout和let var 不能共存)

时间: 2024-08-29 18:18:58

Swift-MJ的相关文章

【Swift】Alamofile网络请求数据更新TableView的坑

写这篇BLOG前,有些话不得不提一下,就仅当发发恼骚吧... 今天下午为了一个Alamofire取得数据而更新TableView的问题,查了一下午的百度(360也是见鬼的一样),竟然没有一个简单明了的回答, 而唯一几个比较接近答案的,说要 self.tableView.reloadData(),也没有贴上代码,说要放在哪个函数内, 都犹抱琵琶半遮面,让初学者自己采坑,于是郁闷了一下午,刚刚回到家,试想想,要不试试英文网,毕竟Swift就是人家老外的, 说不定老外会告诉你,怎么取得数据并绑定Tab

用Swift实现淘宝和大众点评的下拉刷新

来自Leo的原创博客,转载请著名出处 我的StackOverflow 我的Github https://github.com/LeoMobileDeveloper 效果 淘宝 大众点评 项目地址 其中 大众点评的下拉刷新用了50行左右代码 淘宝的下拉刷新用了90行左右代码 完整的代码地址:PullToRefreshKit Tips:用Swift 2.2写的,所以需要XCode 7.3来运行. PullToRefreshKit 这是我用纯Swift 2.2写的一个库,初衷是为了更简单的实现自定义下

美丽说demo(纯swift代码)

一 总体实现功能图(由于csdn上传的视频有规定大小,这里只简短的录了点,抱歉) 1 图一 : 系统自带属性完成动画翻转 2 图二 : 自定义动画实现翻转 3 应用图标;启动图片;app名字-这些我就不一 一介绍了,你们都应该知道怎么配置吧.我这里是由于录的比较短,所以这部分内容省略了.这里说下几点注意. --> 3.1 修改app名字可以在Bundle name中修改,也可以在Bundle display name中修改. --> 3.2 当我们向Brand Assets中设置启动图片的时候

swift 网络请求&amp;json解析

做实际项目总是离不开这两步,大多数情况下都是采用第三方框架来辅助完成,swift也不例外,由于swift并不成熟,用swift语言写的第三方框架很不稳定(苹果更新太快了),所幸swift和oc可以混编,所以本次使用的框架都是oc里面常用的.网络请求使用AFNetworking,json解析使用MJExtension. 下面开始正文: 1. swift中使用oc框架 其原理很简单,需要一个.h头文件,里面导入我们需要使用的oc框架的头文件,把这个.h文件配置到项目设置中即可 1).我们采取一个不容

Swift使用FMDB操作SQLite

SQLite大家都懂的.本地数据库,在移动设备上使用广泛.IOS平台上自然也少不了它.最近自己折腾一个小App的时候需要使用sqlite本地数据库,上Github搜了下IOS下对SQLite的三方封装有个星星很多的FMDB.不过是Obiect-C的库,我是使用Swift的,本以为不能用了,不过后折腾了下发现在Swift下使用oc的库非常简单.下面我就介绍下如何在Swift下使用oc的FMDB库. 1.下载 第一步自然是去下载FMDB了.https://github.com/ccgus/fmdb

iOS开发:一个无限滚动自动播放图片的Demo(Swift语言编码)

很久以前就想写这么一个无限滚动的Demo了,最近学习了下Swift,手中没有可以用来练手的Demo,所以才将它实现了. Github地址(由于使用了UIView+AutoLayout第三方进行布局,所以Github判断主要语言是OC):https://github.com/wzpziyi1/DisplayingImage 使用UICollectionView来实现的,不同于UIScrollView实现的一点是,就是不需要再手动实现缓存池功能,因为UICollectionView中的cell本就是

Apple Swift编程语言新手教程

Apple Swift编程语言新手教程 作者: 日期: gashero 2014-06-03 FROM:http://gashero.iteye.com/blog/2075324 文件夹 1   简单介绍 2   Swift入门 3   简单值 4   控制流 5   函数与闭包 6   对象与类 7   枚举与结构 1   简单介绍 今天凌晨Apple刚刚公布了Swift编程语言,本文从其公布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的

swift 深入理解Swift的闭包

我们可用swift的闭包来定义变量的值. 先来一个简单的例子大家先感受感受. 定义一个字符串的变量的方法: 直接赋值 var str="JobDeer" 还可以用闭包的方式定义: var str:String={ return "JobDeer" }() 闭包还可以这么定义,省略了等号和括号: var str:String{ return "JobDeer" } 闭包中可以定义get方法. var str:String{ get{ return

在Swift结构体中如何实现写时复制?

结构体(Struct)在Swift语言中占有重要地位,在Swift标准库中,大约有90%的公开类型都是结构体,包括我们常用的Array.String.Dictionary.结构体相比类,一个最重要的特性就是它是值类型,而类似引用类型.值类型是通过复制值来赋值的,而不是引用同一个内存地址,这样就不存在数据共享的问题,能防止意外的数据改变,并且它是线程安全的. 举一个很简单的例子,在objc中,数组是类,是引用类型,在Swift中,数组是结构体,是值类型.因此下面的代码中: let array1 =

Swift学习之位移枚举的按位或运算

在OC里面我们经常遇到一些枚举值可以多选的,需要用或运算来把这些枚举值链接起来,这样的我们称为位移枚举,但是在swift语言里面却不能这么做,下面来讲解一下如何在swift里面使用 OC的位移枚举的区分 //位移枚举typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) { UIViewAutoresizingNone = 0, UIViewAutoresizingFlexibleLeftMargin = 1 << 0, UIViewAutores