Swift基础1

Swift是苹果公司于2014年WWDC苹果开发者大会发布的开发语言,也是第一套具有与脚本语言同样的表现力和趣味性的系统编程语言,可与Objective-C共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序。

2015年开发者大会上,苹果公司推出了Swift2.0版本,完全开源。

创建一个Swift新工程方法如下: Xcode->Create a new Xcode project -> 选择OS X -> Application -> Command Line Tool

开头不需要引入头文件但需要引入Foundation, 不过有时需要引入一些框架。

import Foundation

每一句结束时不用加分号。

输出语句:(向经典致敬)

print("Hello, World!")

一、声明常量和变量

在Swift中使用"let"修饰一个常量, 使用"var"修饰一个变量。
使用let定义一个常量, 不能重新赋值。
Swift支持隐式类型推断,可以根据初值,自动地推断Swift的数据类型。

let a = 10   //会自动推断a为Int类型
//结尾不需要加";"    Swift用空格表示结束

let b = "Bonjour"  //会自动推断b为String类型
let z : String = "Bonjour"

let c = 12.7  //会自动推断c为Double类型

Swift 值能进行显示类型转换支持隐式类型转换,不能让两个不一样的数据类型做四则运算。
Swift强转的格式:数据类型(需要强转的数据)

let d = Double(a) + c

可以直接使用中文或表情符号为常量和变量命名 (OC也可以,但不能调用)

let 大牛 = "多炮塔神教"

let 😊 = "笑"

注:Swift的命名可能会困扰你

定义两个字符串类型的常量

let e = "呵呵"
let f = "哒"

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

let str = e + f

print(str)  //打印结果为  呵呵哒


Swift里使用var定义一个变量:

var a = 10

a = 100

如果需要定义一个初值为nil的变量, 必须指定变量数据类型然后加问号
格式为:var + 变量名 + ":" + 变量类型? = nil

//拆包
var b : String? = nil      //注意:nil和""不同
//let使用这样的语法没有意义

注意:let定义的常量地址不可改。

二、数组

1. 声明数组

Swift中声明一个数组也要使用"let"或者"var"。

数组初始化的第一种方式:数组如果没有指定数据类型,会根据数组的初值推断数据类型
注意:Swift的数组里面的数据类型必须是相同的

let array = [1, 2, 4]//该数组中元素的数据类型为Int

let array1 = [1, 2, 3, "a"]//该数组中元素的数据类型在Swift1.0版本是AnyObject,在Swift2.0版本是NSObject

数组初始化的第二种方式:先指定数据类型

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

//一个错误的例子:
//let array2 : [Int] = [1, 2, 4, "a"]

定义一个空的数组

let array3 : [Int] = []
2. 数组的增删改查

首先定义如下数组

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

数组的查:

print(array[1])   //打印第二个元素

数组的增:

//在某个位置插入一个元素
array.insert(8, atIndex: 2)

//在某个位置插入一个新数组
var array1 = [9, 10, 11, 12]
array.insertContentsOf(array1, at: 2) 

print(array)  //可以打印查看结果

数组的删:

//移除数组中所有元素
array.removeAll()

//删除数据的同时, 保存内存空间
array.removeAll(keepCapacity: true)
//注:Swift里面的Bool是一个枚举值, 只有true和false两种参数,默认是false

//移除一个范围内的元素
let range : Range = Range(start: 1, end: 2) //Range后面的括号相当于alloc init 的意思
array.removeRange(range)

//移除第一个元素
array.removeFirst()

//移除前两个元素
array.removeFirst(2)

//移除最后一个元素
array.removeLast()

数组的改:


array[1] = 66  //修改第二个元素

var array2 = [5, 6, 7, 8]
var array3 = array + array2

三、字典

Swift的字典与OC类似,也是无序的,也是key对应value。

但是Swift的字典里面所有的key必须是同一数据类型的,所有的value必须是同一数据类型的,这点与OC不同,需要注意。

创建字典的两种方式:

//第一种方式:Swift1.0这种方法不存在  (所以Swift1.0里字典很不好用)
var dictionary = [1 : 2, 3 : 4, "a" : "b"]
let dictionary1 = [1 : 2, 3 : 4, 5 : 6]

//第二种方式:
var dictionary2 : [Int : String] = [1 : "a", 2 : "b"]

字典的增

dictionary[9] = 10

字典的改

dictionary[1] = 50

字典的删

dictionary.removeValueForKey(1)

dictionary.removeAll()

dictionary.removeAll(keepCapacity: true)

//key对应的value为nil也是删除
dictionary[1] = nil

字典的查

print(dictionary)
print(dictionary[1])
print(dictionary[2])

四、元组

元组是不同与OC的一个容器。
使用()表示定义一个元组,元组里面没有数据类型的概念

//创建元组的第一种方式:
let type = ("德累斯顿", "Dresden")
//访问元组的第一种方式:
print(type.0)

//创建元组的第二种方式:
let type2 : (name : String, nickName: String) = type
//访问元组的第二种方式:
print(type2.name)

五、循环结构

Swift中的循环结构可以分为四种循环:

1. for循环

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

//for循环不用像OC那样加括号了
for var i = 0; i < array.count; i++ { //i++之间没有空格  i++是一句话
    print("i = \(i)")   //要打印的变量用反斜杠加括号包围起来
}

2. while循环
var i = 1
while i < 6 {
    i++
    print(i)
}
3. repeat while循环(和 do while循环 一样)

Swift1.0版本的时候叫做do while, Swift2.0版本的时候叫做repeat while

repeat{
i++
print(i)
}while i < 10
4. for-in 循环
let array = [1, 2, 3, 4, 5]

for var a in array {
    print(a)
}

六、分支结构

//var timer : String? = nil
//
//if timer != nil{     // (timer != nil)不能换成timer  但是括号可以省略(多个条件要加括号)       因为Swift里表示真假是布尔值 ???
//print("timer存在")
//} else {
//print("timer不存在")
//}


////switch    Swift里面switch很强大
////case里自带break
////但default一定要有
//let value = 13
//
//switch value {
//case 0:
//    print(value)
//case 1:
//    print(value)
//default:
//    print("超了")
//}
//
//// 0...10 表示的是 从0开始到10结束并且包含10
//// 0..<10 表示的是 从0开始到10结束但不包含10
//// 除了上述两种没有其他的
//switch value {
//case 0...10:
//    print(value)
//case 11...20:
//    print(value)
//default:
//    print("又超了")
//}




////switch可以搭配元组使用
//let point = (2, 10)
//
//switch point {
//case (10, 10):
//    print(point)
//case (_, 10):
//    print(point.0)
//case (10, _):
//    print(point.1)
//case (_, _):
//    print(point)
//}
//
//let value = 0
//let value1 = 100
//switch value{
//case 0 where value1 < 10:
//    print(value)
//case 0 where value1 > 10:
//    print("正确")
//default:
//    print("错误")
//}

六、函数

Swift中函数共有8种类型:

无参无返回值
无参有单个返回值
无参有多个返回值
有参无返回值
有参有单个返回值
有参有多个返回值
inout函数
嵌套函数

基本结构:

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

无参无返回值函数
 

func test () -> Void {    //函数名与()之间有没有空格似乎都行
    print("无参无返回值")
}
test()
无参有单个返回值
func test1() -> String {
    return"无参有单个返回值"
}
print(test1())
返回一个Int类型的数组
func test2() -> Array <Int> {
    return [1, 2, 3]
}
print(test2())
返回一个OC的数组
func test2() -> NSArray {
    return [1, 2, "a", "b"]
}
print(test3())
有参无返回值的函数

参数格式参数名 + ":" + 参数类型

-> Void 可以省略

func test4(name : String, sex : String) -> Void {
print("我叫\(name), 我的性别是\(sex)")
}
test4("蒙大拿", sex: "未知")

//参数是一个数组格式 : 参数名 + ":" + Array<数据类型>
func test5(phoneNumber : Array<Int>) {
    
}

有参有返回值
func test6(a : Dictionary) -> Dictionary {
    return a;
}

无参有多个返回值

func test6() -> (String, String){
    return ("HE", "AP")       
}

let type = test6()

print(type)
print(type.1)


有参有多个返回值
func test7(name : String, age : Int) -> (String, Int){
    return (name, age)
}

let type1 = test7("Silvia", age: 18)
print("我叫\(type1.0), 今年\(type1.1)岁")

inout函数
//Swift函数里面的参数 默认是使用let修饰的, 是不可以更改的
func test8(inout number : Int){
    number = 100
}

var a = 5
test8(&a)
print(a)



func test9(inout name : String, inout name2 : String){
    let temp = name
    name = name2
    name2 = temp
}
test9(&name, name2: &name1)
print(name, name1)
函数嵌套
//第一层
func test10(){
    //第二层
    func test11(){
        //第三层
        func test12(){
            //第四层
            func test13(){
                //第五层
                func test14(){
                    //第六层
                    func test15(){
                        //...可以无限定义下去
                    }
                }
            }
        }
    }
}

重点回顾:

  1. 隐式类型推断
  2. 隐式类型转换
  3. 运算符的重载 运算符重载
  4. var b : String? = nil

Swift里很强大的地方有: 1. switch 2. 结构体

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

推荐阅读更多精彩内容

  • Swift 是一门开发 iOS, macOS, watchOS 和 tvOS 应用的新语言。然而,如果你有 C 或...
    edison0428阅读 335评论 0 1
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,673评论 1 10
  • Swift 介绍 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 ...
    大L君阅读 3,128评论 3 25
  • 重读元曲,试着去感受字里行间带动的画面感,倍受触动,更觉传统文化竟能如此触动内心深处最柔软的那部分,令心灵觉醒,让...
    Maggie_竹子阅读 461评论 0 0
  • 都说细节决定成败。 一件华丽丽的礼服, 外表是令人惊叹的, 但我更喜欢去发现她的细节之美。 今天,带你一起来感受礼...
    小雅怡情阅读 330评论 1 1