swift笔记--基础(一)

综述

  • swift有四种类型:枚举,结构器,类,函数类型(前两种是值类型,后两个是引用类型),及一种复合类型元组
  • 此学习笔记基于4.0语法

一些小知识

  1. Palygtound:从Xcode6开始出现
  • 可以快速查看结果,
  • 语法特性改变时候可以快速查看。
  • 创建工程时候选择Playground工程,即:Xcode初始化启动时候初始化的第一项
  1. 一些变化:
  • 在Swift中布尔类型与整数类型是完全分离的用Bool 。
  • 真用 true 表示;假用 false 表示;这两者都属于Swift中的关键字。
  • String 在oc中是类对象,但是在swift中是结构体(性能比较高些);
  1. 注释

    • 一般文档多行注释
    
    		/**
    		- version:
    		- attention:
    		- waring:
    		- important:
    		- author:
    		- throws: 该函数可能会抛出异常
    
    		*/
    		这些特殊的关键词,会在文档里有特殊的颜色标记
    
    • 行注释:苹果官方文档里多用这个

      /// --author:
      
  2. 代码分段
    swift使用注释 和MARK来分段

     ```
     // MARK: ----这是一个分段
     ```
    
  3. UIKit 简单使用

        let _view : UIView = UIView.init(frame: CGRect.init(x: 0, y: 0, width:100, height: 100))
        _view.backgroundColor = UIColor.red
         self.view.addSubview(_view)
         var tesy = "luo yongmeng"
         for char in tesy.characters {
             print(char)
             print(tesy.characters.count)
         }
    
  4. swift中使用定义在另一个文件中的类是不用导入的,swift中没有类导入的概念

  5. 多行字符字面量:用(""")包围起来的部分
    注: 需要注意的是,在多行中的当个换行符是被忽略的

    """
    一个 Swift 程序有一个或多个文件组成。在 Swift 中,文件是一个有意义的个体。能存在于文件顶级目录有如下组件:
    

• 模块导入语句:一个模块是除了文件外最高级的单元。一个模块可以由几个文件组成;一个带模块的文件,对于其它文件而言,是可见的;如果没有 import 语句,一个模块就不能看到另一个模块。例如,如果你想要在 iOS 程序中与 Cocoa 交互,你就需要在文件的第一行,引入 import UIKit。
• 变量声明:文件的最外层声明一个变量,我们称这个变量为全局变量:它将存活在整个程序运行周期中。
• 函数声明:文件的最外层声明一个函数,我们称这个函数为全局函数:所以代码都可见和可访问,不需要发送任何消息给任何对象。
• 对象类型声明:类,struct 或者 enum 的声明。
“”"
```

  1. 懒加载

    lazy var names: [String] = {
            print("加载数据")
            return ["12334","88888"]
        }()
    
    

一. 变量和常量

  1. 字面量

    • 进制数:2(0b),8(0o),16(0x);其中所有字母必须小写,其次如果字面量可以用"-"分隔(0b0100110_01000)
    • Int:可以通过Int.min和Int.max取出所能表示的最小/最大值,需注意:Int8 等如果直接对其进行初始化的时候必须显式对这些对象做类型声明;
    • Float:默认为Double,如果想声明float显式声明即可;
    • Bool:true和float
    • 高位转地位或者高精度转经度
       let a:Int8 = 120
        print("int8:\(a)")
        let i = Int(a)
        print("转成int:\(i)")
        let testInt = 10003
        let testInt8 = Int8(testInt&127)
        print("高位向地位转换:\(testInt8)")
    
    
  2. let 定义常量,var 定义变量,变量如果定义不使用(赋值操作等)会有一个警告:如图
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pjLktxGh-1589445569445)(/Users/vrv2/Desktop/swift/swift1.png)]

    var age : Int = 20;
    age = 30;
    let s : Double = 1213.256
    // s = 4;常量不可以修改
    let tesy = "luo yongmeng"
    let strCount : Int = tesy.characters.count
    var testInt = 0
    var testBool : Bool
    var testDouble : Double
            
    for char in tesy.characters {
         print("the string is \(char) that length with \(strCount)")
         }
    testInt = 5
    testBool = true
    testDouble = 3.14153333
    print("test int \(testInt) test bool \(testBool) test double \(testDouble)  the View is \(_view)")
    
    

注:在实际开发中优先使用变量;可以通过指针拿到对象,从而修改内部属性。

  1. 一般不推荐使用关键字作为变量名(标识符),但swift中可以在其前后使用(`),作为关键字;

    var `var` = 4566
    `var` = 333333
    print("the \(`var`)")
    
  2. swift 类型转换
    所有的转换都是显示的转换,即便低精度转高精度:

var testFloat : Float
var reserveDouble : Double
testFloat  = 2.3333333
reserveDouble =  2.3344123412512512
//低精度转高精度
reserveDouble = Double(testFloat)
 //高精度转低精度
testFloat = Float(reserveDouble)

==修改:170913=

二,元组

元组是swift中唯一的复合类型,元组的元素可以是结构体,枚举,基本变量,类,也可以是元组或空元组;元组中必须包含两个元素;

class testClass {
	    var name = "hello world!"
	    
	}
	//        元组 自动推断类型
	        let tupleMu = (10,_view,true,testClass().name)
	//不推荐 该写法 ;
	 //        let tupleMu1 : (Int,UIView,Bool,String) = (10,_view,true,testClass().name)
	//获取元组的元素
	        
	        print("获取元组的元素 get tuple to \(tupleMu) with type :\(type(of: tupleMu))")
	        //通过下标获取
	        print("通过下标获取 get tuple to 1\(tupleMu.1)  2 :\(type(of: tupleMu.3))")
	//      指定 元组标签
	        
	        let tupleMuCl = (isInt:10,isView:_view,isBool:true,myClass:testClass().name)
	         print("指定 元组标签 get tuple to 1:\(tupleMuCl.isInt)  2 :\(tupleMuCl.myClass)")

三, 数组----字典----集合


 func testArrDicSet() {
//        let myArr = [Int]()
//        let myArr = Array<Int>()
        let myArr  = [1,3,5,4.5555];
        for temp in 1..<5 {
            print(temp)
        }
        print(myArr)
//        常用函数 myArr.count myArr.isEmpty myArr.contains myArr.insert myArr.remove
        
        let isContain = myArr.contains(5)
        print("iscontain = \(isContain)")
//        var myDic = Dictionary<String, Int>()
//        // 通过字典的不定参数个数的构造方法创建一个字典对象,
//        
//        myDic = Dictionary<String, Int>(dictionaryLiteral: ("1", 1), ("2", 2), ("3", 3))
//        // 使用字典的默认构造方法创建一个空的字典常量。
//        var myDic1 = [Int : Float]()
//        myDic1 = [23:33.3,23:332.444]
//         
//        // 这里也是通过字典的不定参数个数的构造方法创建一个字典常量
//        let myDicC = [Int : Float](dictionaryLiteral: (0, 0.0), (1, 1.1), (2, 2.2))
        var   myDic = ["one":33.3,"three":332.444]
        myDic = ["one":33.3,"two":332.444]
        print("获取字典值:\(String(describing: myDic["two"]))")
    }

四, 范围操作符
一般用在循环里:半开1..<5表示从1到5 但不包含5
全闭区间1...5表示从1到5

```
for temp in 1..<5 {
    print(temp)
 }
for temp in 1...5 {
    print(temp)
 }
```

注:这里不一定是数字或浮点型的,也可以是字符或者字符串

	 func  testRange() -> Int {
        // 表示该范围从"aaa"到"ccc"之间
        let stringRange = "aaa" ... "ccc"
        switch "ccb" {
        case stringRange:
            // 结果输出:In stringRange!
            print("the string is  stringRange numbers!")
        default:
            print("Not in stringRange numbers!")
        }
        return 1
    }
   // 表示该范围从"a"一直到"c",但不包括"c"
	let charRange = Character("a") ..< Character("c")

四, 转义字符 字符串

  1. 转义字符

    含义字符含义
    0"表示空字符(null character)“\\”
    t”水平制表符“\n”
    r”回车“\”"
    '”单引号“\u{n}”
  2. 字符串

  • 常用创建方法:

    ```
    	// 创建一个字符串变量empty
    	var emptyS = ""
    	 
    	// 这里用默认字符串构造方法来创建一个空的字符串对象
    	emptyS = String()
    	 
    	// 这里用常用的字符串字面量来初始化一个字符串
    	let strS = "hello world"
    	 
    	// 这里直接通过指定字符序列的字符串构造方法创建一个字符串
    	let strS2 = String("hello world")
    	 
    	// 指定一个字符的字符串构造方法创建一个字符串
    	let ch他 = String(Character("字"))
    ```
    
  • 字符串插值
    字符串插值就是在一个字符串字面量中使用\(object)

      	```
      	     var testInt = 0
      	     var testBool : Bool
      	     var testDouble : Double
      	     testInt = 5
      	     testBool = true
      	     testDouble = 3.14153333
      	    
      	     var str:String
      	     str = "testInt -->\(testInt)"+"testDouble -->\(testDouble)testDouble-->\(strCount)"
      	     print("append string is \(str) is contain \(str.contains("\(testBool)"))")	
      
      	```
    
  • 字符串格式化

     //字符创格式化
       let name  = 2
       let msg = 45
            
       let time = String.init(format: "%02d:%02d",arguments: [name,msg])
       print("现在是\(time)")
    

五, 控制语句 (大部分在oc中的"()"这里都可以省略)

  1. do语句块与c语言使用相同,需注意如果{}不是由do引出那么表示该段为闭包;

  2. if的{}不能缺少;

    	 // 1> 判断句不用加()
        // 2< 判断句结果必须是一个真假值
         if a > 10 {
             print("a 是大于 0 a =\(a)")
             a -= 1
          }else{
              print("a 是小于 0 a =\(a)")
              a -= 2
          }
    
    
  3. switch 后面的表达式可以是表示任何类型的表达式,甚至还可以是一个元类,但 case 后面的表达式必须是表示值类型的表达式(case后面可以不用加brack);

     ```
     	let sex = "男"
     	switch sex {//可以判断字符串,整形,浮点,区间,字符,元组
     	   case "男"://这里可以写多个条件 case 1,3,4或者case 1...3/1..<4
     	      print("是男的")
      //如果需要继续执行下一个case,加上fallthrough
     	//    fallthrough
     	    case "女":
     	      print("是女的")
     	    default:
     	      print("是未知性别")
     	  }
     
     ```
    
  4. Swift 3.0版本起,for 循环语句只能使用 for-in 的形式:

        // 这里将输出i = 9到i = 1
    	for i in (1 ..< 10).reversed() {
    		   	print("i = \(i)")
    		}
    				
    let array = [1, 2, 3, 4]
     
    // 获取数组元素以及当前元素对应的索引值
    for (index, elem) in array.enumerated() {
        print("index = \(index), elem = \(elem)")
    }
    
    
  5. repeat - while 循环
    与c中的dowhile循环类似,只是因为do作为do语句块的引入词,所以加入repeat代替:

     ```
     repeat{
     }
     while condition
     //示例
     repeat{
         if a > 10 {
             print("a 是大于 0 a =\(a)")
             a -= 1
         }else{
             print("a 是小于 0 a =\(a)")
             a -= 2
         }
     }
     while a > 0
     ```
    
  6. 提前退出 guard ,类似于断言,一般用在###函数里###,确保后面的bool值为真,但是语句后面必须得有else语句:

    var number = 10
    //如果这里为 false 程序就不会继续执行下去
    guard number < 100 else {
        // 这里使用exit()函数退出
        exit(0)
    }
    //示例
      func testGuard(age : Int ) -> Bool {
        guard age >= 20 else {
            print("错误 信息 重新开始")
            return false
        }
        print("信息正确 继续执行 ")
        return true
    }
    
     /// guard 示例
     let _ = self.testGuard(age: 30)
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简简单单lym

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值