swift语法基础<一>

作者: shineDeveloper | 来源:发表于2016-11-25 23:01 被阅读59次

    声明变量和常量

    //1.基本数据类型:Int 整形,Double 和Float表示浮点型,Bool布尔值,String文本型数据,Array 数组,Dictionary 字典
    //2.常量 let ,变量var
    let con = 100
    var avi = 30
    avi = 40
    //3.一行中声明多个常量或者变量,用逗号隔开
    var a = 3, b = 4, c = 5
    //4.类型标注:如果声明的同时附了初始值,并不需要类型标注
    var who: String
    who = "xiaoming"
    print(who)
    

    swift的基本语法

    类型转换

    //类型转换
    let a: UInt8 = 10
    let b: UInt16 = 110
    print("\(UInt16(a) + b)")
    
    //整形转变成浮点型
    let sa = 3
    let pi = 3.1415
    let add = Double(sa) + pi
    print(add)
    

    元组

    //元组的补充:可以把任意的类型组合成元组,元组可以看成是一个复合的值
    let people = (18, "xiaoming")
    //可以把元组的内容单独的分成常量和变量
    let (age, name) = people
    print(age)
    print(name)
    
    //如果我们只是需要一部分元组值,则可以把要忽视的部分用下划线进行标记
    let (age1, _) = people
    print(age1)
    
    //通过下标也可以访问元组中的元素
    print(people.0)
    
    //定义元组的时候也可以根据单个元素命名,通过名字获取元素的值
    let rec = (w: 10, h: 20)
    print(rec.w)
    

    可选类型

    //可选类型:处理值可能缺失的情况,可以表示任意类型的值缺失的情况
    let str : String? = "12345"
    
    //用if语句表示是否是可选类型
    if str != nil {
        print(str!)//只有加上!才能获取可选类型的值,表示对可选类型的强制解析
    }
    
    //判断可选类型是否包含值的方式称为可选绑定,在它的语法中可以声明常量接受,也可以声明变量接受
    /*
     可选绑定可以用if和while语句中来对可选类型的值进行判断,并赋值给常量或者是变量
     注意点:在swift中nil表示的是一个确切的值,而在oc中他表示一个指向不存在对象的指针
     */
    if let str1 = str {
        print(str1)
    }
    var  servercode : Int? = 404
    servercode = nil //现在servercode 不包含值
    var sunny : String?
    
    //隐式解析可选类型:当确定一个变量的值已定不为nil时,就可以把它设置成隐式解析可选类型
    //第一次被赋值之后,可以确定变量的值不为nil
    var possiblestr: String! = "swift"
    print(possiblestr)//可以不通过!来获取变量的值
    

    断言

    //在值缺失,或者值并不满足特定的条件,代码就不会继续执行,此时需要触发一个断言结束代码的运行,通过调试找到值缺失的原因
    let age2 = -10
    assert(age2>=0, "年龄要大于0")//assert就表示一个断言,只有保证条件为真时,才能保证代码可以继续运行
    

    运算符

    //2.溢出运算符:在运算符的前面加上&符号 &+,&-, &*
    var c = UInt8.min
    c = c &- 1
    print(c)
    
    //swift可以对浮点数求余,而在oc中是不可以的
    var rem = 10 / 2.3
    print(rem)
    
    //空合并运算符(a ?? b 对a的条件进行判断,a不为nil执行a的语句,否则执行b的语句)
    /*
     表达式a必须是可选类型
     默认值b的类型必须要和a存储值的类型保持一致
     */
    let words = "hello"
    var say: String?
    var content = say ?? words
    print(content)
    
    //闭区间运算符a...b 半开区间运算符a..<b , 注意中间没有空格
    for i in 1...5 {
        print(i)
    }
    

    字符串

    //字符串
    var str1 = "swift"
    var str2 = String()//初始化字符串的实例
    var str3 = str1 + "学习"//字符串的拼接可以使用+号
    print(str3)
    str1 += "你好"//+=将字符串拼接到自身
    print(str1)
    
    let char : Character = "!"
    str1.append(char)
    print(str1)//append拼接字符
    print("str3 has \(str3) chars")
    
    let quotation = "same"
    let samequ = "same"
    if quotation == samequ {//判断字符串是否相同
        print("same")
    }
    
    var food = ["fruits:apple",
                "fruits:orange",
                "fruits:banana",
                "vegetable:tomato",
                "vegetable:potato"]
    for fru in food {
        if fru.hasPrefix("fruits"){//hasPrefix查找特定的前缀
          print(fru)
        }
        if fru.hasSuffix("apple"){//hasSuffix判断是否拥有特定的后缀
            print(fru)
        }
    }
    

    数组

    //数组的声明可以是显性声明,也可以推断出数组的类型。数据放在数组之前,它的类型必须明确。
    food.append("vegetable:aaaa")//通过append添加新的数据项
    food[0...2] = ["ss", "nn"]//可以通过下标值替换数组中的元素。若替换的下标有3个,而右边只有2个值,则swift会自动赋值为nil
    print(food)
    
    food.insert("meat", at: 0)//通过insert插入元素
    food.remove(at: 0)//通过remove方法可以移除数组中的元素
    food.removeLast()//移除最后一项的元素
    
    //使用构造语法来创建一个由特定类型构成的空数组
    var someint = [Int]()
    print("someints is of type [int] with\(someint.count)items")
    
    //可以创建特定大小并且所有数据都被默认的构造方法 如:浮点型,3个
    var threedouble = [Double](repeating: 0.0, count: 3)
    
    

    字典

    //字典
    /*
     swift的字典使用时需要具体规定可以存储的键和值的类型,必须提前定义清楚,方法是通过显性类型标注或者是类型推断
     */
    var person = ["age": 18,
                    "name": "jack"] as [String : Any]
    
    /*updateValue方法会在键不存在的时候设置值或者在键存在的情况下更新值。这个方法会返回更新值的原值,
     这样方便我们检查更新是否成功
    */
    if let oldname = person.updateValue("tom", forKey: "name") {
        print("原来的值:\(oldname)")
    }
    
    /*
     2.removeValue方法也可以用来在字典中移除键值对
     3.每一个字典中的数据项都有(key, value)元组的形式返回,并且我们可以使用临时常量或者变量分解这些元组
     */
    for (key, value) in person{
        print(key,value)//字典元素是无序的,遍历的时候不能保证顺序
    }
    
    var dic = Dictionary<Int , String>()//声明空字典
    dic[16] = "年龄"//为键为16,赋值为年龄
    print(dic)
    
    
    dic = [:]//声明空字典的方式二
    

    控制流

    //控制流
    let base = 3
    let power = 10
    var answer = 1
    for _ in 1...power {//下划线符号_(替代循环中的变量)能够忽略具体的值,并且提供循环遍历时对值的访问
        answer *= base
    }
    print(answer)
    
    //在switch中case中可以省略break
    let count = 3_000_000_000
    let countedthings = "stars in the milky way"
    var naturalcount : String
    switch count {
    case 0:
        naturalcount = "no"
    case 1...3:
        naturalcount = "a few"
    case 4...9:
        naturalcount = "several"
    case 10...99:
        naturalcount = "tens of"
    case 100...999:
        naturalcount = "hundreds of"
    case 1000...9999:
        naturalcount = "thounds of"
    default:
        naturalcount = "millions and millions of"
    }
    

    函数

    //函数
    //函数的声明格式:带一个参数,有返回值的函数
    func sayhello(personname: String) -> String{
        return "hello" + personname + "!"
    }
    
    //调用函数
    print(sayhello(personname: "anna"))
    
    //带有2个参数有返回值的函数,中间用逗号分开
    func lengthnumber(start: Int, end: Int) -> Int{
        return end - start
    }
    print(lengthnumber(start: 1, end: 10))
    
    /*
     局部参数名 例如personname,只能在函数体内使用,外部参数名写在局部参数名之前,用
     空格进行分割。
     */
    func join(s1: String, toString s2: String, withjoiner joiner: String) -> String {
        return s1 + s2 + joiner
    }
    print(join(s1: "hello", toString: "swift", withjoiner: "!"))
    
    /*
     joiner的值没有被指定,函数会使用默认值(""),当未给带默认值的参数提供外部
     参数名时,swift会自动提供外部名字。此时,外部参数名字和局部参数名字是一样的
     */
    
    
    /*
     没有指定返回类型的函数返回void。 在swift中,void和空的元祖是一样的
     */
    
    func addtwoints(a: Int, b: Int) -> Int{
        return a + b
    }
    
    func multiplytwoints(a: Int, b: Int) -> Int{
        return a*b
    }
    
    /*
     定义一个叫做mathfunction的变量,类型是‘一个有2个int 类型的参数,并返回一个int类型值的函数’
     */
    var mathfunction: (Int,Int) -> Int = addtwoints
    print("results:\(mathfunction(2, 3))")
    
    
    /*
     函数也可以当作参数
     */
    func printmathresult(mathfunction: (Int, Int) -> Int, a: Int, b: Int){
        print(mathfunction(a, b))
    }
    print(printmathresult(mathfunction: addtwoints, a: 3, b: 5))
    

    //类
    //用class关键字进行标记
    class person {
        //定义参数
        var name = "tina"
        var age = 19
        
        //定义函数
        func produce(){
            age += 1
        }
    }
    

    补充:结构体和枚举中也可以定义方法

    相关文章

      网友评论

        本文标题:swift语法基础<一>

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