Swift初探(一)

常量和变量

常量

使用let定义一个常量,定义完成之后不能重新赋值.
使用let定义的常量其内存地址是不可变的
Swift支持隐式类型推断,可以根据初值,自动判断Swift的数据类型

let a = 10

let b: String = "Hello"

let c = 20.1

Swift不支持隐式类型转换, 不能让两个不一样的数据类型做四则运算.所以我们需要进行强转

Swift强转的格式: 数据类型(需要强转的数据)

let d = Double(a) + c

在Swift中可以使用汉字或者emoji表情作为数据名

let 哈哈 = "嘿嘿嘿"
let 😊 = "笑"

Swift支持运算符的重载,它会根据环境自动判断运算符的含义

let haha = "哈哈"
let heihei = "嘿嘿"
let hengheng = haha + heihei
Swift支持运算符的重载

变量

Swift中使用var来定义一个变量

var a = 11
a = 100

定义一个nil变量

如果我们需要定义一个初值为nil的变量, 格式为: var + 变量名 + ":" +变量类型? = nil

通常使用"?"来进行拆包操作...

var b: String? = nil

复杂数据类型

数组

在Swift数组里面的数据类型必须是一样的

let array = [1, 2, 3, "a"]

以上代码在Swift中是anyObject类型,也就是任意类型的.在Swift2.0中是NSObject类型的.这是数组初始化的一种方式,直接在"[]"中添加元素

数组初始化的第二种方式,在创建的时候先指定数据类型

let array1: [Int] = [1, 2, 4]

数组初始化的第三种方式, 定义一个空的数组

let array2: [Int] = []

对数组的操作 (增 删 改 查)

先定义一个数组,首先他应该是一个var定义的变量

var array = [1, 2, 3, 4, 5]

数组的增

往数组中插入数据

1.在某个位置单独的插入一条数据

在下标为3的位置插入一个整型数据5

array.insert(5, atIndex: 3)

2.在某个位置插入一个新的数组

在下标为0处插入一个数组

array.insertContentsOf([111, 222, 555], at: 0)

数组的删

数组的删

1.删除全部的元素

array.removeAll()

2.删除全部的元素,但是保留数组的空间

array.removeAll(keepCapacity: Bool)

在这里注意bool值跟OC中的是不同的,在OC中Bool类型只是一个typedef,指定非零即真,而在Swift中Bool是一个枚举,指定ture为真,falue为假

3.删除指定下标处的元素

array.removeAtIndex(index: Int)

4.删除一个区间的元素

删除一个区间的元素
let range: Range = Range(start: 1, end: 3)
array.removeRange(range)

5.删除一个区间的元素

其他的操作就是删除首位元素,末位元素以及从首位到某位元素

数组的改

可以通过数组下标进行改变数组的值

通过下标更改数组的值

我们可以使用运算符的重载进行数组的拼接

var array1 = [6, 7, 8, 9, 10]
var array2 = [11, 12, 123]
var array3 = array1 + array2
数组的拼接

字典

创建字典的两种方式

第一种
let dictionary = [1: 2, 3: 4, "a": "b"]

这种方式在Swift1.0中是不存在的

第二种
在Swift的字典中, 所有的key 所有的value都必须是同一类型的

let dictionary1: [String: Int] = ["a": 1, "b": 2]

对字典的操作

字典的增

首先定义一个字典

var dictionary = [1: 2, 3: 4, 5: 6]

对字典中不存在的key赋值其实就是对字典做增加的操作

dictionary[7] = 8

字典的删

字典的删跟数组很象 就不详细介绍

根据key值删除元素

dictionary.removeValueForKey(1)

可以通过给字典key对应的value值赋空来删除元素

dictionary[3] = nil

元组

元组是Swift中不同于OC的一点,

我们使用() 来表示一个元组, 元组中是没有具体的数据类型的概念的

定义一个元组

let type = ("悟空", "XZ")

访问元组

1.通过下标访问

直接使用点语法点出元组的下标

通过下标访问

2.通过名字

我们定义元组的时候可以指定其中元素的名称

let type1: (name: String, nickNmae: String) = type

指定名字

结构

循环结构

for循环

遍历数组 可以省略掉括号

let array = [1, 2, 3, 4, 5]
for var i = 0; i < array.count; i++ {
    print(array[i])
}

while循环

var i = 0
while i < array.count {
    print(array[i])
    i++
}

repeat...while循环

repeat{
print(i)
i++
}while i < 10

在Swift中repeat...while和C OC的do...while是一样的. Swift1.0版本的时候交do while, Swift2.0版本叫repeat while

for in 循环

let array = [1, 2, 3, 6, 8]
for var a in array {
    print(a)
}

分支结构

if else

var timer: String? = nil
if timer != nil {
    print("yes")
}else{
    print("no")
}

在 if else 判断的条件中不能填 timer ,在Swift中Bool是一个枚举,指定ture为真,falue为假

switch...case

let value = 10

switch value {
case 0:
    print(value)
case 1:
    print("a")
default:
    print("55555")
}

在Swift中的不需要break来跳出switch...case,因为在case中就已经存在break,但是如果不能满足全部的条件,则必须写default

在Swift中的switch...case可以在case中写一个条件.或者区间,我们使用"..."来表示闭区间,使用"..<"表示开区间

let value = 10
switch value {
case 0...10:
    print(value)
case 11 ..< 20:
    print("v")
default:
    print("vvvv")
}

当然我们也可以用它来判断一个元组,

let point = (10, 10)
switch point {
case (10, 10):
    print(point)
case (_, 10):
    print(point.1)
case (10, _):
    print(point,0)
case (_, _):
    print("哈哈哈")
}

在上面我们使用"_"来表示这个位置没有值,并且他的条件已经完全包含了,所以我们不用写default

其实上面我们已经提到case可以是一个条件

let value = 0
let value1 = 100
switch value {
case 0 where value1 < 10:
    print(value)
case 0 where value1 > 10:
    print(value1)
default:
    print("...")
}

上面代码很好的诠释了这句话,当我们判断case已经找到对应值,还必须满足where的条件

函数

在Swift中存在的函数种类: 无参无返回值 无参有返回值(单个返回值, 多个返回值) 有参无返回值 有参有返回值(单个返回值, 多个返回值)inout函数 嵌套函数.

函数的定义是:

func(关键字) test(函数名) "()"(参数列表) -> Void(返回值类型) {
  函数体
}

无参无返回值

func test() ->Void {
    print("one");
}
// 调用函数
test()

但函数没有返回值的时候,可以省略"-> Void"

无参有返回值

// 返回字符串
func test1() ->String {
    return "two"
}

print(test1())

// 返回数组
func test2() ->Array<Int> {
    return [1, 2, 3]
}
print(test2())

// 返回OC中的数组
func test3() ->NSArray {
    return [1, 3, "a", "m"]
}
print(test3())

上面返回数组是"<>"表示数组中元素的类型

有参无返回值

// 因为是无返回值,故省略了 -> Void 
func test4(number: Array<Int>) {
    print("电话: \(number)")
}

test4([1, 1, 0])

有参有单个返回值

func test5 (age: Int) ->String {
    return "年龄是\(age)"
}
print(test5(666))

无参有多个返回值

func test6 () -> (String, String, Int) {
    return ("a", "b", 6)
}
print(test6())

有参有多个返回值

func test7 (hello: Int, world: String) ->(Int, String) {
    return (hello, world)
}

print(test7(6, world: "6"))

其实在Swift中有多个返回值就是返回一个元组,元组中的元素我们可以使用点语法,点元素的下标来访问.

inout函数

func test8 (inout number: Int) {
    number = 100
}
var a = 5
test8(&a)
print(a)

inout函数可以讲外界的数据传进函数在传出来 在外界使用,这就是inout函数的用法,我们可以使用它进行外界数据与函数中数据的交换

函数嵌套

Swift是支持函数嵌套的,一层一层可以无限嵌套下去

// 第一层
func test10() {
    // 第二层
    func test11() {
        // 第三层
        func test12() {
            // 第...层
            // ...可以无限定义下去
        }
    }
}

Last

Swift和Storyboard是乔帮主留给我们两个财富,而Swift是一门充满魅力的语言.就像他的名字和logo一样,轻便,快速...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,817评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,329评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,354评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,498评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,600评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,829评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,979评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,722评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,189评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,519评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,654评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,940评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,762评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,993评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,382评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,543评论 2 349

推荐阅读更多精彩内容