Swift 基础语法入门(一)

一.变量和常量

1.声明常量和变量

用let来声明常量  let radius = 10

用var来声明变量 var age = 20   或者是var x = 0.0, y = 0.0, z = 0.0

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

(1)let π = 3.14159

(2)let 网址 = "http://ios.itcast.cn"

(3)let 🐶🐮 = "小狗和母牛"

// 🐶和🐮是emoji表情,是一种特殊的Unicode字符

// 可以在Mac上通过快捷键:control + command + 空格 ,弹出emoji键盘

3.常量和变量名的注意点

不能包含数学符号(比如 + 、-、 *、\ )

不能包含箭头(比如↑、↓、←、→)

不能包含非法无效的Unicode字符(比如⚽ )

不能是关键字(比如let、var)

不能以数字开头(比如 123go)

不能是单独一个下划线 _ (比如var _ = 10)

… …

二.可选项,控制流

// 定义 可选项使用?
// 解包使用!

let x: Optional = 10;

let y: Int? = 20


print(y)
print(x)
func demo(x: Int?, y: Int?){
//    let x: Int? = 10
//    let y: Int? = 200
    
    // 强行解包有风险
//    print(x! + y!)
    
    
    // 使用if 判断
    // 但是 如果使用if 一不小心 会让代码很丑陋
    if x != nil && y != nil {
        print(x! + y!)
    }else{
        print("x 或者 y 为 ni")
    }
}

//MARK: - ?? 操作符
func demo1(x: Int?, y: Int?){
    
    /**
        ?? 是一个简单的 三目
     - 如果优质 ,使用值
     - 若果没有值 使用 ?? 后面的值进行替代
     ?? 的操作符号的优先级"低“ 在使用的时候最好加上() 包一下
     */
    print((x ?? 0) + (y ?? 0))

}

// MARK: - if let / var 连用语法 目的就是判断值
func demo2() {
    
    let oName: String? = "老王"
    let oAge: Int? = 10
    
    if oName != nil && oAge != nil {
        print(oName! + String(oAge!))
    }
    
    
    // if let 连用 判读对象的值是否为nil, {}内一定有值,可以直接使用,不需要解包
    if let name = oName,
        let age = oAge {
        
        // 进入分之 之后 name 和age 一定有值 不需要强行解包
            print(name + String(age))
    }else{
        print("name 或者 age 为 ni")

    }
}

//MARK: - guard 守卫/守护
/**
    guard let 和 if let 刚好相反
 
 */
func demo3() {
    let oName: String? = "老王"
    let oAge: Int? = 10
    
    // guard let 守护一定优质 ,如果没有 则返回
    guard let name = oName,
       let age = oAge else {
        print("姓名或者年龄为nil")
        return
    }
    
    // 代码执行至此, name和age 一定优质!
    // 通常判断是否有值之后,会做具体的逻辑实现,通常代码多
    // 如果用if let 凭空多出一层分支,guard 是降低分支层次的办法
    // guard 的与方法语法 Swift 2.0 推出的
    print(name + String(age))
    
}
// guard let 和 if let 的技巧
// 使用同名的变量接收值,在后续使用的都是非空值,不需要解包
// 好处 可以避免取名字的烦恼
func demo4(name: String?, age: Int?) {
    guard let name = name, let age = age else {
        print("姓名或者年龄为nil")
        return
    }
    print(name + String(age))
}
//demo(x: 10, y: nil)

//demo3()
demo4(name: "老王", age: 18)

  

// 不同类型之间的值不能直接运算 如果没有值是nil 不是任何数据类型 不能参与计算 // "!" 强行解包 - 从可选值中强行获取对应的非空值 如果真的是nil 就会崩溃 
// 程序员必须为每一个 ! 负责 // 程序中少用 “!” print(x! + y!) // var 的可选值默认为nil // let 的可选值没有默认值

三,字符串

func demo() {
 
    let str = "我要飞的跟高"
    
    for c in str.characters {
        print(c)
    }
}

// 字符串长度
func demo1() {
    let str = "hello world"
    // 返回指定编码的对应的字节数量
    //UTF 的编码是(0-4 个) 每个汉字是3个字节
    print(str.lengthOfBytes(using: .utf8))
    
    // 字符串的长度
    print(str.characters.count)
    
    // 使用NSString 中转、
    // swift 中可以使用“ 值 as 类型” 类型转换
    let ocStr = str as NSString
    print(ocStr.length)
}

// 字符串拼接
func demo2() {
    let name = "老王"
    let age = 18
    
    let title: String? = "Boss"
    
    let point = CGPoint(x: 100, y: 200)
    
    // 字符串拼接的时候注意可选项
    let str = "\(name) \(age) \(title ?? "") \(point)"
    print(str)
    
}

// MARK: - 格式化
func demo3() {
    let h = 8
    let m = 9
    let s = 6
    
    let dataStr = "\(h):\(m):\(s)"
    print(dataStr)
    
    // 使用格式化字符串
    let dataStr1 = String(format: "%02d:%02d:%02d", h, m, s)
    print(dataStr1)
}

//MARK: - 字符串子串
func demo4() {
    //建议:一般使用NSString 作为中转
    let str = "我们一起去飞"
    let ocStr = str as NSString
    let s1 = ocStr.substring(with: NSMakeRange(2, 3))
    print(s1)
    
    //前面的字符串里面的内容表示 长度
   print(str.substring(from: "我们".endIndex))
   print(str.substring(from: "我g们".endIndex))
    
    // 取字符串的范围
    
    guard let range = str.range(of: "一起")
 else {
        print("没有找到")
        return
    }
    
    print(range)
    print(str.substring(with: range))

}


//demo1()
//demo3()
demo4()

 四,集合

func demo1() {
    let array = ["张三", "小芳", "小样"]
    print(array)
    
    // Swift 中基本数据类型不需要包装
    let array1 = [1, 2, 3, 4]
    print(array1)

    let p = CGPoint(x: 100, y: 200)
    let  array2 = [p]
    print(array2)
    
/* 混合数组
    如果数组中的类型不一致,自动推到结果 [NSObject]
     在swift中海油一种类型[AnyObject] -> 任意对象
     在swift 中一个类可以没有任何父类
     **** 在混合数组中 CG 结构体需要包装
     */
    
    
    let array4 = ["张三", 1, NSValue(cgPoint: p)] as [Any]
    
    print(array4)
}

func demo2() {
//    数组合并的的时候必须类型一致
    var array: [Any] = ["历史", "数学"]
    
    let array1 = ["地理", 1] as [Any]
    
    array += array1
    
    print(array)
}

demo1()

  

 

 

  

posted @ 2017-03-20 00:23  徒步天涯  阅读(253)  评论(0编辑  收藏  举报