iOS-Swift基础语法

2018-06-29  本文已影响0人  长衣貌

1./初体验

//: Playground - noun: a place where people can play

// 1.导入框架
//#import <UIKit/UIKit.h>
import UIKit


// 2.定义一个标识符
// int a = 10;
// swift中定义标识符:必须制定该标识符是一个常量还是一个变量
// var(变量)/let(常量) 标识符的名称 : 标识符的类型 = 初始化值
var a : Int = 10;
let b : Double = 3.14;
a = 29;
// b = 3.11 错误写法


// 3.语句结束后可以不跟;
// 前提:一行只有一条语句,如果一行中有多条语句,则需要使用;分割
var m : Int = 20
let n : Double = 3.44


// 4.打印内容
// NSLog(@"%d", a)
print(a)
print("hello world")

2./常量和变量的使用注意

//: Playground - noun: a place where people can play

import UIKit

// 1.在开发中优先使用常量,只有在需要修改时,在修改成var


// 2.常量本质:保存的内存地址不可以修改,但是可以通过内存地址拿到对象,之后修改对象内部的属性
//UIView *0x100 = UIView alloc] init];
//view = UIView alloc] init];
//view.backgroundColor = uiCOlor redColor];

let view : UIView = UIView()
//  view = UIView() 错误写法
view.backgroundColor = UIColor.redColor()

3./创建对象

//: Playground - noun: a place where people can play

import UIKit

// 1.创建UIView对象并且制定frame
let view : UIView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))

// 2.设置UIView的属性
view.backgroundColor = UIColor.blueColor()

// 3.给view对象内部添加子控件
// 3.1.创建子控件
// swift中使用枚举: 1.枚举的类型.具体的类型 2. .具体的类型
let btn : UIButton = UIButton(type: .ContactAdd)

// 3.2.设置btn的位置
btn.center = CGPoint(x: 50, y: 50)

// 3.3.将子控件添加到View中
view.addSubview(btn)

4./数据类型

//: Playground - noun: a place where people can play

import UIKit

// 类型推导
// var a : Int = 30
var a = 30

// 可以通过:option + 鼠标左键,查看一个标识符的类型
let b = 3.14

5./基本运算

//: Playground - noun: a place where people can play

import UIKit

let m = 32
let n = 3.14

// Swift中没有隐式转化,不会将整形自动转成浮点型
// let result = m + n 错误写法
// 将整型转成浮点型
let result = Double(m) + n
// 将浮点型转成整型
let result1 = m + Int(n)

6./逻辑分支(if - else if - 三目)

//: Playground - noun: a place where people can play

import UIKit

// 1.if的使用
// 1> if后面的()可以省略
// 2> 判断句不再有非0即真.必须有明确的Bool值:true/false
let a = 10

if a != 0 {
    print("a不等于0")
} else {
    print("a等于0")
}

// 2.if elseif的使用
let score = 88

if score < 0 || score > 100 {
    print("没有意义的分数")
} else if score < 60 {
    print("不及格")
} else if score < 80 {
    print("及格")
} else if score < 90 {
    print("良好")
} else if score <= 100 {
    print("优秀")
}

// 3.三目运算符
let m = 40
let n = 30

var result = 0

//if m > n {
//    result = m
//} else {
//    result = n
//}

result = m > n ? m : n

print(result)



7./逻辑分支(guard)

//: Playground - noun: a place where people can play

import UIKit

// 1.guard必须用在函数
let age = 20

//func online(age : Int) {
//    if age >= 18 {
//        if 带了身份证 {
//            if 带了钱 {
//                print("可以上网")
//            } else {
//                print("不可以上网,回家拿钱")
//            }
//        } else {
//            print("不可以上网,回家拿身份证")
//        }
//    } else {
//        print("不可用上网,回家去吧")
//    }
//}

func online(age : Int) {
    // 如果条件成立,者会执行后面的代码块
    // 如果条件不成立,则会执行{}中的语句,并且{}中必须跟上
    guard age >= 18 else {
        print("未成年不能上网")
        return
    }
    
    guard 带了身份证 else {
        print("不可以上网,回家拿身份证")
        return
    }
    
    guard 带了钱 else {
        print("回家拿钱")
        return
    }
    
    print("留下来上网")
}

8./逻辑分支(switch)

//: Playground - noun: a place where people can play

import UIKit

// 1.基本用法
let sex = 0

// 0:男 1:女 其他:其他

// 1> switch可以不跟() 2> case语句结束后可以不跟break,默认系统会加

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

// 2.基本用法的补充:
// 1>如果希望一个case中出现case穿透,那么可以在case语句结束后跟上fallthrough
// 2>case后面可以跟多个条件,多个条件以,分割
switch sex {
    case 0, 1:
        print("正常人")
    default:
        print("其他")
}

// 3.switch可以判断浮点型
let a : Double = 3.14

//if a == 3.14 {
//    print("π")
//} else {
//    print("非π")
//}

switch a {
case 3.14:
    print("π")
default:
    print("非π")
}

// 4.switch可以判断字符串
let m = 20
let n = 30
let opration = "+"

var result = 0

switch opration {
case "+":
    result = m + n
case "-":
    result = m - n
case "*":
    result = m * n
case "/":
    result = m / n
default:
    print("非法操作符")
}

// 5.switch可以判断区间
let score = 93

switch score {
case 0..<60:
    print("不及格")
case 60..<80:
    print("及格")
case 80..<90:
    print("良好")
case 90...100:
    print("不错噢")
default:
    print("不合理的分数")
}

9./循环(for)

//: Playground - noun: a place where people can play

import UIKit

// 1.普通的for循环
//for (int a = 0; i < 10; i++) {
//}

// ()可以省略
for var i = 0; i < 10; i++ {
    print(i)
}

// 2.forin写法:区间遍历
for i in 0..<10 {
    print(i)
}

// 3.forin写法:但是不需要用到下标值
// 如果不需要用到下标值,可以使用_来代替
for _ in 0..<10 {
    print("hello world")
}

10./循环(while - do while)

//: Playground - noun: a place where people can play

import UIKit

// 1.while循环
// 1> while后面的()可以省略 2>没有非0(nil)即真
var a = 10

while a > 0 {
    a--
    print(a)
}


// 2.do while循环
// 1> 类型while循环的差别 2>do需要换成repeat
repeat {
    a++
    print(a)
} while a < 10

11./字符串的使用

//: Playground - noun: a place where people can play

import UIKit

// 1.定义字符串
let str = "hello world"


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


// 3.字符串的拼接
// 3.1.字符串之间的拼接
let str1 = "小码哥"
let str2 = "IT教育"
// NSString stringwithFormat:@"%@%@", str1, str2]
let result = str1 + str2

// 3.2.字符串和其他标识符之间的拼接
let age = 18
let name = "why"
let height = 1.88

//NSString stringwhithFor
// 拼接其他标识符的格式: \(标识符的名称)
let info = "my name is \(name), age is \(age), height is \(height)"

// 3.3.字符串的格式化: 音乐播放器
let min = 3
let second = 04
//let timeStr = "0\(min):0\(second)"
let timeStr = String(format: "%02d:%02d", arguments: [min, second])


// 4.字符串的截取
let urlString = "www.520it.com"

// 将String类型转成NSString类型 string as NSString
let header = (urlString as NSString).substringToIndex(3)
let middle = (urlString as NSString).substringWithRange(NSRange(location: 4, length: 5))
let footer = (urlString as NSString).substringFromIndex(10)

12./数组的使用

//: Playground - noun: a place where people can play

import UIKit

// 1.数组的定义
// 不可变数组(let)和可变数组(var)
// 1>不可变数组
let array = ["why", "lmj", "lnj", "yz"]

// 2>可变数组
// var arrayM = Array<String>()
var arrayM = [String]()



// 2.对可变数组的操作(增删改查)
// 2.1.添加元素
arrayM.append("why")
arrayM.append("yz")
arrayM.append("lmj")
arrayM.append("lnj")


// 2.2.删除元素
arrayM.removeAtIndex(0)
arrayM


// 2.3.修改元素
arrayM[1] = "why"
arrayM


// 2.4.获取某一个下标值的元素
arrayM[0]


// 3.遍历数组
// 常见
for i in 0..<arrayM.count {
    print(arrayM[i])
}

for name in arrayM {
    print(name)
}


// 不常见
for i in 0..<2 {
    print(arrayM[i])
}

for name in arrayM[0..<2] {
    print(name)
}


// 4.数组的合并
//for name in array {
//    arrayM.append(name)
//}
//arrayM

// swift中如果两个数组类型是完全一致的,可以相加进行合并
let resultM = arrayM + array

13./字典的使用

//: Playground - noun: a place where people can play

import UIKit

// 1.字典的定义
// 1>不可变字典(let)
// 注意:在swift中无论是数组还是字典都是使用[],但是如果[]中存放的是元素,编译器会认为是一个数组.如果[]中存放的是键值对,编译器会认为是一个字典
let dict = ["name" : "why", "age" : 18, "height" : 1.88]

// 2>可变字典(var)
// var dictM = Dictionary<String, AnyObject>()
var dictM = [String : AnyObject]()


// 2.对可变字典的操作
// 2.1.添加元素
// dict["weight"] = 60 错误写法
dictM["name"] = "why"
dictM["age"] = 18
dictM["heihgt"] = 1.88
dictM["weight"] = 75


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


// 2.3.修改元素
// 注意:如果有对应的key,则修改对应的value,如果没有对应的key,则添加对应的键值对
dictM["age"] = 30
dictM


// 2.4.获取元素
dictM["weight"]




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

// 3.2.遍历所有的value
for value in dictM.values {
    print(value)
}

// 3.3.遍历所有的key/value
for (key, value) in dictM {
    print(key)
    print(value)
}



// 4.合并字典
// 注意:字典即使类型一直也不可以先加合并
let tempDict : [String : AnyObject] = ["phoneNum" : "+86 110", "sex" : "男"]

//let resultDict = tempDict + dictM

for (key, value) in tempDict {
    dictM[key] = value
}

dictM

14./元组的使用

//: Playground - noun: a place where people can play

import UIKit

let userArray = ["why", 18, 1,88]
userArray[0]
let userDict = ["name" : "why", "age" : 18, "height" : 1.88]
userDict["name"]

// 元组的基本写法
let userInfo = ("why", 18, 1.88)
userInfo.0
userInfo.1
userInfo.2

// 给每一个元素起别名
let userInfo1 = (name : "why", age : 18, height : 1.88)
userInfo1.name
userInfo1.age
userInfo1.height


// 别名就是变量的名称
let (name, age, height) = ("why", 18, 1.88)
name
age
height

15./可选类型的基本使用

//: Playground - noun: a place where people can play

import UIKit

// 类中所有的属性在对象初始化时,必须有初始化值
class Person : NSObject {
    var name : String?
    var view : UIView?
}

// 1.定义可选类型
// 1>普通定义可选类型的方式
// var name : Optional<String>
// 2>语法糖
var name : String?

// 2.给可选类型赋值
name = "why"


// 3.从可选类型中取值
// Optional("why")
print(name)
// 从可选类型中取值:可选类型!-->强制解包
//print(name!)


// 4.注意:如果可选类型中没有值,那么强制解包程序会崩溃
// 强制解包是非常危险的操作:建议在解包前先判断可选类型中是否有值
if name != nil {
    print(name!)
    
    print(name!)
    
    print(name!)
}


// 5.可选绑定
// 1> 判断name是否有值,如果没有值,则不执行{}.
// 2> 如果有值,则对可选类型进行解包,并且将解包后的值赋值给前面的常量
//if let tempName = name {
//    print(tempName)
//}

if let name = name {
    print(name)
    print(name)
    print(name)
    print(name)
}

16./可选类型的使用

//: Playground - noun: a place where people can play

import UIKit

let urlString = "http://www.520it.com"

// 1.普通写法
let url : NSURL? = NSURL(string: urlString)
if url != nil {
    let request = NSURLRequest(URL: url!)
}

// 可选绑定
if let url = url {
    let request = NSURLRequest(URL: url)
}

// 可选绑定的简介写法
if let url = NSURL(string: urlString) {
    let request = NSURLRequest(URL: url)
}

17./函数的基本使用

//: Playground - noun: a place where people can play

import UIKit

// 1.没有参数没有返回值
func about() -> Void {
    print("iPhone7s Plus")
}

func about1() {
    print("iPhone7s")
}

about()

let view : UIView

// 2.有参数没有返回值
func callPhone(phoneNum : String) {
    print("打电话给\(phoneNum)")
}

callPhone("+86 110")


// 3.没有参数有返回值
func readMessage() -> String {
    return "吃饭了吗?"
}

print(readMessage())


// 4.有参数有返回值
func sum(num1 : Int, num2 : Int) -> Int {
    return num1 + num2
}

sum(20, num2: 30)

18./函数的使用

//: Playground - noun: a place where people can play

import UIKit

// 1.内部参数和外部参数
// 内部参数:在函数内部可以看到的参数名称,称之为内部参数
// 外部参数:在函数调用时,可以看到的参数,成之为外部参数
// 默认情况下从第二个参数开始,既是内部参数也是外部参数
// 如果希望将第一个参数也声明称外部参数,只需要在标识符前加上外部参数的名称即可
func sum(num1 num1 : Int, num2 : Int) -> Int {
    return num1 + num2
}


// 函数的重载:函数名称相同,参数不同(1.参数的类型不同 2.参数的个数不同)

func sum(num1 : Int, num2 : Int, num3 : Int) -> Int {
    return num1 + num2 + num3
}



// 2.默认参数
func makeCoffee(coffeeName : String = "拿铁") -> String {
    return "制作了一杯\(coffeeName)咖啡"
}

makeCoffee("雀巢")
makeCoffee("猫屎")

makeCoffee()


// 3.可变参数
func sum(nums : Int...) -> Int {
    var result = 0
    
    for num in nums {
        result += num
    }
    
    return result
}

sum(12, 30, 40)
sum(44, 20, 30, 44, 55, 66)


// 4.引用参数
var m = 20
var n = 30

// 注意:默认情况形参都是常年
//func swapNum(var m : Int, var n : Int) {
//    let temp = m
//    m = n
//    n = temp
//}
// swapNum(20, n: 30)

// 如果形参前面有inout,则需要传递指针到函数内
func swapNum(inout m : Int,inout n : Int) {
    let temp = m
    m = n
    n = temp
}

swapNum(&m, n: &n)

print("m:\(m) n:\(n)")

// 5.函数的嵌套使用(不常用)
func test() {
    
    func demo() {
        print("demo")
    }
    
    print("test")
    
    demo()
}

test()

19./类的定义

//: Playground - noun: a place where people can play

import UIKit

class Person : NSObject {
    var name : String?
    var age : Int = 0
    var height : Double = 0.0
}

let p = Person()

// 注意:赋值不是调用set方法,直接拿到属性给属性赋值
p.name = "why"
p.age = 18
p.height = 1.88

上一篇下一篇

猜你喜欢

热点阅读