欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Swift 基础语法入门(一)

程序员文章站 2024-02-20 19:14:52
...

一.变量和常量

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()