三日上手swift(第一日)会陆续更新到项目

其实学习一门新的语言,成本代价真的不高,一般3日足尔,网上一堆装b者,说优点,说市场,说热点,等看完这些东西都可以学完了,当然要精通又是另外一回事了,其实像我们学外语,会打招呼,会问路,会表达基本思想都用了,那些熟语谚语什么的,一辈子都学不完,因为不停在变!

所以本swift教程并不是教大家如何如何玩转一门语言,是让大家快速看懂别人swfit的项目,最后加上强大的复制黏贴和万能的google,大家都可以动手做项目了,当然这是本人第一次在写文章,内容不够高级或者如有雷同,实属巧合和无奈.


Swift第一日

在开始之前,教大家如何使用本教程,首先点击Get started with a playground创建一个训练场,如图:


三日上手swift(第一日)会陆续更新到项目_第1张图片

然后将我写的代码按标题分别一块块复制进入,先看一遍,没必要自己敲(谁敲谁傻b),特别要看打印结果,遇到看不懂的,敲一遍过一遍,然后再问,但xcode7.3的编译器有时会有问题,重启一下xcode即可。


重复说明,我的写代码,大家千万不要拿去敲,太浪费时间和消磨积极性,只需要根据代码板块复制粘贴到playground上看,然后可以自己根据思路写上注释,重点最后一章我会上传一个小项目让你大家来敲一遍,敲到不懂的回来看即可

playground特性:

  • 所见即所得(快速查看结果)
  • 语法特性发生改变时,可以快速查看.

上手

1.Swift中导入框架
import Foundation
2.定义标识符
// OC : int a = 20
// Swift定义标识符: 必须制定该标识符是一个变量(var)还是一个常量(let)
// let/var 标识符 : 类型 = 赋值;
var a : Int = 20;
a = 30;

let b : Double = 3.14
3.在swift中如何一行代码中只有一条语句, 那么语句结束时 ; 可以省略
4.swift中打印内容
// NSLog(@"%d", a);
// NSLog(@"Hello world");

// Swift中字符串不需要@
var a : Int = 20;

print(a)
print("hello world")

常量和变量

1.在开发中优先使用常量, 防止不小心修改掉之前赋的值
2.常量的本质: 指向的内存地址不可以修改, 但是可以通过内存地址找到对应的对象, 之后修改对象内部的属性

import UIKit

//创建
// var view : UIView = UIView()
// view = UIView()

let view : UIView = UIView()
// view = UIView()
view.alpha = 0.5
view.backgroundColor = UIColor.orangeColor()
view.frame = CGRectMake(0, 0, 100, 100)
类型推导
import UIKit

// var m : Int = 10
var m = 10

什么是类型推导
1.在swift中如果在定义一个标识符时有直接给该标识符进行赋值, 那么系统会自动根据后面赋值的类型, 推导出前面标识符的类型
2.如果有直接赋值, 那么标识符后面的类型可以省略
3.可以通过Option + 鼠标左键, 查看标识符的类型

let n = 3.14

let btn = UIView()

强转类型
// 将Int类型转成Double Double(m)
// 将Double类型转成Int Int(n)

// let result = Double(m) + n

let result = m + Int(n)
//CGFloat 和 Double 还是要转
let a : Double = 2.44
let b : CGFloat = 4.55
let result1 = a + Double(b)

基本运算

Swift和OC的差异
1> if后面的()可以省略掉
2> swift中没有非0(nil)即真

Bool --> true/false
let score = 100

if score < 0 || score > 100 {
    print("不合理的分数")
} else if score < 60 {
    print("不及格")
} else if score < 80 {
    print("及格")
} else if score < 90 {
    print("良好")
} else {
    print("优秀")
}
guard

1>当条件表达式为true时候跳过else语句中的内容,执行语句组内容
2>条件表达式为false时候执行else语句中的内容,跳转语句一般是return、break、continue和throw
func online(age : Int) {

 // 1.去网吧判断年龄
    guard age >= 18 else {
        print("回家去")
        return
    }

    // 2.判断是否带了身份证
    guard 带了身份证 else {
        print("回家拿身份证")
        return
    }

    // 3.判断是否带了钱
    guard 带了钱 else {
        print("回家拿钱")
        return
    }

    // 执行语句
    print("留下来上网")

}
guard
三目运算
let result = m > n ? m : n
switch
let sex = 1

/*
switch sex {
case 0:
    print("男")
case 1:
    print("女")
default:
    print("其他")
}*/

switch sex {
case 0, 1:
    print("正常")
default:
    print("非正常人")
}
循环中的区间遍历
for i in 0..<10 {
    print(i)
}

for i in 0...9 {
    print(i)
}

while循环

/*

 int a = 20
 while (a) {
 }

    1> while后面的()可以省略
    2> 没有非0(nil)即真
 */

var i = 10
while i > 0 {
    print(i)
    i -= 1

}

repeat while
// 2.do while循环
// 区别: 不再使用do while --> repeat while

var m = 0

repeat {
    print(m)
    m += 1
} while m < 10

字符串

// 1.定义字符串
// 1.1.定义不可变字符串 : 使用let修饰
let str = "hello swift"

// 1.2.定义可变字符串
var strM = "hello world"
strM = "hello china"

// 2.遍历字符串中所有的字符
for c in str.characters {
    print(c)
}

// 3.获取字符串长度
let length = str.characters.count

 4.字符串的拼接

// 4.1.字符串之间的拼接
let str1 = "学习"
let str2 = "swift"
// let resultStr = [NSString StringWithFormat(@"%@%@", str1, str2)]
let resultStr = str1 + str2
print(resultStr)

// 4.2.字符串和其他标识符之间拼接
let name = "KOBE"
let age = 18
let height = 1.98

let infoStr = "my name is \(name), age is \(age), height is \(height)"
print(infoStr)

// 4.3.拼接过程中格式化
let min = 2

let second = 23
let timeStr = String(format: "%02d:%02d", arguments: [min, second])//打印:02:03
字符串截取

let urlString = "www.baidu.com"

// 1.方式一: 将String类型转成NSString类型, 再进行截取
// (urlString as NSString) --> NSString
let header = (urlString as NSString).substringToIndex(3)
let footer = (urlString as NSString).substringFromIndex(10)
let range = NSMakeRange(4, 5)
let middle = (urlString as NSString).substringWithRange(range)

// 2.方式二: Swift原生方式进行截取
let headerIndex = urlString.startIndex.advancedBy(3)
let header1 = urlString.substringToIndex(headerIndex)

let footerIndex = urlString.endIndex.advancedBy(-3)
let footer1 = urlString.substringFromIndex(footerIndex)

// let range1 = Range(start: headerIndex.advancedBy(1), end: footerIndex.advancedBy(-1))
let range1 = headerIndex.advancedBy(1)..

数组


// 1.如何定义数组
// 1.1.定义不可变数组 --> 使用let修饰
let array = ["Kobe", "James", "Curry", "Jordon"]

// 1.2.定义可变数组 --> 使用var修饰
// 数组是泛型集合 --> 必须明确指定该数组中之后存放的元素
// var arrayM = Array()
var arrayM = [String]()

// 2.对可变数组的基本操作
// 增删改查 --> 数据库
// 2.1.添加元素
arrayM.append("James")
arrayM.append("Curry")

// 2.2.删除元素
// arrayM.removeAll()
let removeItem = arrayM.removeAtIndex(1)
arrayM

// 2.3.修改元素
arrayM[0] = "Kobe"
arrayM

// 2.4.根据下标值获取元素
let item = arrayM[0]

// 3.遍历数组所有的元素
// 3.1.可以下标值
for i in 0..

字典

import UIKit

// 1.定义字典
// 1.1. 定义不可变字典 : 使用let修饰
// 系统会根据[]中存放时键值对还是一个个元素来判断该[]是一个数组还是字典
let dict = ["name" : "Kobe", "age" : 18, "height" : 1.88]

// 1.2. 定义可变字典 : 使用var修饰
// var dictM = Dictionary()
var dictM = [String : NSObject]() // 常见

// 2.对可变字典的基本操作
// 增删改查
// 2.1.添加元素
dictM.updateValue("Kobe", forKey: "name")
dictM.updateValue("James", forKey: "name") // 将被更新掉的元素进行返回
dictM.updateValue("19", forKey: "age")
dictM["height"] = 1.78
dictM

// 2.2.删除元素
dictM.removeValueForKey("age")
dictM

// 2.3.修改元素
// 如果原有没有对应的key/value, 那么就添加键值对
// 如果原有已经有对应的key/value, 那么直接修改
dictM.updateValue("1.77", forKey: "height")
dictM["name"] = "Kobe"
dictM

// 2.4.获取元素
let item = dictM["name"]

// 3.遍历字典
// 3.1.遍历字典中所有的key
for key in dict.keys {
    print(key)
}

print("----")

// 3.2.遍历字典中所有的value
for value in dict.values {
    print(value)
}

print("----")

// 3.3.遍历字典中所有的key/value
for (key, value) in dict {
    print(key)
    print(value)
}

// 4.字典的合并
// 系统类型的字典也不可以相加合并
let dict1 = ["name" : "Kobe", "age" : 18]
var dict2 = ["height" : 1.88, "phoneNum" : "+86 110"]
// let resultDict = dict1 + dict2

for (key, value) in dict1 {
    dict2[key] = value
}

元组tuple

元组是Objective-C中没有的数据类型,与数组类似,都是表示一组数据的集合,但与数组不同,它的特点是:
元组的长度任意
元组中的数据可以是不同的数据类型
元组的定义很简单,用小括号括起来,然后以逗号隔开就可以了

// 3.使用元组定义一组数据 : 个人信息
// 3.1.元祖的基本写法
let infoTuple = ("JAMES", 18, 1.88, "+86 110")

let nameTuple = infoTuple.0
print(nameTuple.characters.count)

// 3.2.给元祖中所有的元素起别名
let infoTuple1 = (name : "JAMES", age : 18, height : 1.88, phoneNum : "+86 110")
infoTuple1.0 // 该方法依然保留
infoTuple1.name
infoTuple1.phoneNum

// 3.3.别名就是标识符的名称 (不常见)
let (name, age, height) = ("JAMES", 18, 1.88)
name
age
height

可选类型

import UIKit

// 只有可选类型才能赋值为nil
// Optional泛型集合 --> 必须明确执行该可选类型中存放值得类型
// var view : Optional = nil

// 1.定义可变类型
// 1> 普通写法
// var name : Optional = nil
// 2> 简便写法 --> 语法糖
var name : String? = nil
print(name)

// 2.给可选类型赋值

// name = Optional("Kobe")
name = "Kobe" // 系统会对字符串进行包装Optional, 再进行赋值

// 3.打印可选类型的值 Optional("Kobe")
print(name)

// 4.取出可选类型中具体的值 : 强制解包 --> 可选类型 + !
// print(name!)

// 5.取值的注意:
// 如果可选类型中是没有值的, 那么强制解包程序会崩溃
// 建议: 在对可选类型进行解包前, 最好先判断是否为nil
if name != nil {
    print(name!)
  
}

// 6.解包 : 可选绑定
// 1> 系统判断name有没有值, 如果没有值, 直接跳过 {}
// 2> 如果有值, 那么系统会对name就行强制解包, 并且将解包后的结果赋值给前面的tempName
if let tempName = name {

    print(tempName)
        
}

if let name = name {

    print(name)

}

你可能感兴趣的:(三日上手swift(第一日)会陆续更新到项目)