swift笔记

作者: 未来可期me | 来源:发表于2016-07-28 15:03 被阅读12次

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

相关文章

网友评论

    本文标题:swift笔记

    本文链接:https://www.haomeiwen.com/subject/iyuajttx.html