swift笔记

1.什么是swift

2014年,苹果公司推出的全新编程语言
天朝翻译为雨燕,logo就是个雨燕
跟oc一样都用于ios,mac
2010-2014.4年开发

2.语法特点

可以看到oc,javascript,c#,python等语言影子
借鉴了这些语言的优势,同时具备编译型语言的高能性,和脚本语言的灵活性【不需要全部编译通过,才能运行】

3.相关数据

Xcode>6.0
mac >10.9.3

4.注意

swift的源文件的拓展名是.swift
比如:main.swift

两个不需要

a.不需要写main函数
从上往下依次执行,所以最前面的代码自动当做程序的入口
b.不需要每一条语句都加分号

let num = 2

加上也是对的

但是---如果同一行代码,有几条语句的时候,需要加上分号

let a = 1;let b = 2;let c= 3

注释

单行注释

//这是当行注释

多行注释

/*
    这是多行注释
    这是多行注释
*/

多行注释可以嵌套使用

/*
外层注释
/*
内层注释
内层注释    
*/
外层注释
*/

5.常量与变量

let 声明常量

let radius = 10

var 声明变量

var age = 20
var x = 0, y = 1 , z= 2

命名
基本上可以用任何你喜欢的字符作为常量和变量名

let  = "苹果"
let 电话 = “110”
let💩 = “一坨”

control+command + 空格 输出emoji

6.字符串简单操作

字符串是String类型,用“”包住内容

let str = "123"
let str2 = "456"

用加号,字符串拼接【两个不同类型的数据不能相加】

let str3 = str + str2;

用反斜线\和小口号()做字符串插值(把常量,变量插入到字符串中)

let hand = 2
var age = 10
let str = "我今年\(age)岁,有\(hand)只手"

7.打印输出

println--输出内容后自动换行
print -- 少了自动换行的功能

8.数据类型

Int,Float,Double,Bool,Character,String
Array,Dictionary,元祖类型(Tuple),可选类型(Optional)
---我们可以看出,数据类型首字母都是大写

如何定义常量或者变量的数据类型

let age:Int = 10

一般来说,没有必要明确指定数据的类型
如果,在声明变量、常量时,赋了初始值,swift可以自动推动该变量或者常量的类型

let age = 10
会推断出age是Int类型

9.变量的初始化

swift严格要求变量在使用之前初始化,不会像oc自动有默认值

整数
swift提供了特殊的有符号整数类型Int和无符号整数类型UInt
Int/UInt的长度和当前系统平台一样
在32位系统,Int和UInt都是32位
在64位系统,Int和UInt都是64位

建议
在定义变量时候,别总是考虑有无符号,数据长度的问题
尽量使用Int,这样可以保证代码的简洁,可复用性

浮点数

Double -- 至少精确到15位
Float -- 至少精确到6位

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

十进制(没有前缀)
没有指数:let d1 = 12.5
有指数:let d2 = 0.125e2
12.5 = 0.125 *10*10
十六进制(以0x为前缀,且一定有指数)
let d3 = 0xC.5p0

数字格式
可以增加额外的0,还可增加额外的下划线

let a = 100000

let b = 100_000

let c = 100
let d = 0100.00

10.类型转换

两个不同类型的数值不能相加

let num = 1
let num2 = 1.0
let sum = num + num2

上面代码第三行会错
解决

let sum = Double(num)+ num2

类型别名

可以使用 typealias关键字定义类型的别名,跟C语言的typedef作用类似

typealias MyInt = Int
给Int起个别名叫MyInt

元类型名称能用在哪儿,别名就能用在哪

let a:MyInt = 2
let minValue = MyInt.min

11.数组

如果定义数组时指定了保存对象的类型,择不能向数组中添加其他类型的内容

let 定义的数组是不可变的
var 定义的数组是可变的

// 数组中保存的都是字符串
let arr = ["zhangsan", "lisi"]

// 数组中保存的是 NSObject
let arr1 = ["zhangsan", 1]

// 添加元素
array.append("lisi")

//更新
array[0] = "zhangwu"

// 删除元素
array.removeAtIndex(1)

// 拼接数组
var array2 = [String]()
array2.append("1")
array2.append("2")
array += array2

12.字典

// 定义并实例化字典(这种类型是开发中常用的类型)
var dict = [String: AnyObject]()
//添加(更新)
dict["name"] = "zhangsan"
dict["age"] = 18

// 删除
dict.removeValueForKey("age")

// 合并字典
var dict2 = ["name": "wangwu", "age": 80, "title": "boss"]
for (k, v) in dict2 {
    dict.updateValue(v, forKey: k)
}

13.元祖

元组(tuples)把多个值组合成一个复合值。元组内的值可以使任意类型,并不要求是相同类型。

let http404Error = (404, "Not Found")
// http404Error 的类型是 (Int, String),值是 (404, "Not Found")

println("The status code is \(http404Error.0)")
// 输出 "The status code is 404"
println("The status message is \(http404Error.1)")
// 输出 "The status message is Not Found"

你可以在定义元组的时候给单个元素命名

let http200Status = (statusCode: 200, description: "OK")

给元组中的元素命名后,你可以通过名字来获取这些元素的值:

println("The status code is \(http200Status.statusCode)")
// 输出 "The status code is 200"
println("The status message is \(http200Status.description)")
// 输出 "The status message is OK"


14.循环和遍历

//whlie
while false
{

}
//类似于do...while
repeat
{

}while false
// 循环
for var i = 0; i < 10; i++ {
    print(i)
}
// 遍历 0 ~ 9(省略号之间不能有空格)
for i in 0..<10 {
    print(i)
}

// 遍历 0 ~ 10(省略号之间不能有空格)
for i in 0...10 {
    print(i)
}

// 特殊写法(如果不关心循环本身的索引,可以用通配符'_'忽略)
for _ in 0...10 {
    print("hello")
}

数组遍历

var studentArr = [1,2,3,4,5,6,7,8,9]
for item in studentArr
{
    print("item = \(item)")
}
//可以遍历数组中的所以和元素(间接用到了元组的特性)
for(index,value)in studentArr.enumerate()
{
    print("index =\(index)   value = \(value)")
}


/字典的遍历

var studentDic = ["姓名":"张三","爱好":"男""]
for (key,value)in studentDic
{
    print("key = \(key)  value = \(value)")
}

15.switch和枚举

//swtich(自带break,可以重复,但是找到一个就不会找第二个)
var name1 = "小明"
switch name1
{
    case "小明":print(name1)
    //要想要自带贯穿效果(重复之后也继续寻找)加fallthrough关键字
    fallthrough
    case "小明":print(name1)
    //一定要包含所有条件
    default: print("不存在")
}


//case可以写区间
var age1 = 12
switch age1 {
case 10...15:
    print("a")
default:
    print("默认")
}

//当age2 == 15成立的时候把age2赋给age
var age2 = 15
switch age2{
case let age where age2 == 15:
    print("age = \(age)")
default: break
}

//遍历元祖
var studentTuple = (姓名:"张三",性别:"男",年龄:12)
switch studentTuple
{
case ("张三","男",12):
    print("找对了")
case (_,_,12):
    print("找对了")//只要一个条件成立就可以进
default:
    break
}

*枚举

//枚举(和oc一样默认初始值是0,如果修改初始值的话需要制指定类型,swift的枚举创建必须要带case)
enum season :Int
{
    case spring = 2
    case summer
    case autumn
    case winter
}
print(season.autumn)
//打印枚举值的值
print(season.autumn.rawValue)

var today = season.summer
//筛选枚举
switch today
{
    case.spring:print("春天")
    case.summer:print("夏天")
    case.autumn:print("秋天")
    case.winter:print("冬天")
}


16.函数

//函数
//无参无返回
func func1()
{
    print("无参无返回值")
}
//无参有返回
func func2()->String
{
    print("无参有返回值")
    return "小明"
}
//有参无返回
func func3 (a :String)
{
    print("有参无返回值")
}
//有参有返回
func func4 (a:Int)->String
{
    print("有参有返回值")
    return String(a)
}
//函数调用
func1()
func2()
func3("123")
func4(1)

//返回值是多个参数
func func5()->(Int,String)
{
    return(1,String(123))
}


17.结构体

我们通过关键字 struct 来定义结构体:
struct nameStruct { 
   Definition 1
   Definition 2
   ……
   Definition N
}

我们定义一个名为 MarkStruct 的结构体 ,结构体的属性为学生三个科目的分数,数据类型为 Int:
struct MarkStruct{
   var mark1: Int
   var mark2: Int
   var mark3: Int
}
我们可以通过结构体名来访问结构体成员。

结构体实例化使用 let 关键字:
struct studentMarks {
   var mark1 = 100
   var mark2 = 78
   var mark3 = 98
}
let marks = studentMarks()
print("Mark1 是 \(marks.mark1)")
print("Mark2 是 \(marks.mark2)")
print("Mark3 是 \(marks.mark3)")

以上程序执行输出结果为:
Mark1 是 100
Mark2 是 78
Mark3 是 98

18.类

Class classname {
   Definition 1
   Definition 2
    --- 
   Definition N
}
定义一个类
class student{
   var studname: String
   var mark: Int 
   var mark2: Int 
}

创建一个实例的语法:
let studrecord = student()

class studentMarks {
   var mark = 300
}
let marks = studentMarks()
println("Mark is \(marks.mark)")

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

推荐阅读更多精彩内容