Swift学习笔记

Swift学习笔记,第1张

概述>在swift中=前后一定要用空格隔开,不然会报错的 >常量和变量的使用, //常量以 let 修饰 常量指向的内存地址是不可以修改的,但是可以修改内部的属性 let a : int =20 let修饰 , a不可以在重新的进行赋值 let a : UIView = UIView(); 例如指向的是一个对象,可以修改对象内部的属性 例如: a.alpath = 0.5;//可以设置

>在swift中=前后一定要用空格隔开,不然会报错的 >常量和变量的使用,

//常量以 let 修饰	常量指向的内存地址是不可以修改的,但是可以修改内部的属性	let a : int =20	let修饰,a不可以在重新的进行赋值	let a : UIVIEw = UIVIEw();  	例如指向的是一个对象,可以修改对象内部的属性 例如:	a.alpath = 0.5;//可以设置内部的属性	//变量以 var 修饰	var a : int =20

>对象

//创建对象 OC 中的写法UIVIEw vIEw = [[UIVIEw alloc]init];//创建对象 swift中的写法let vIEw : UIVIEw = UIVIEw();  //

>类型推导 意思是可以根据赋值,系统会自动推导出前面的类型,类型可以省略不写,举例

let a : Int = 20let a = 20let vIEw : UIVIEw = UIVIEw()let vIEw = UIVIEw();

>基本运算 在swift中不同类型是不可以进行计算的,例如一个double类型与int类型进行运算,唯一的办法可以进行转换,例如

let a : Int = 20let b : Double = 12.2let c = a + Int(b)  //必须进行转换,才能计算//一般如果一个变量+1的话,我们经常这样写a++,但在swift中正确的写法是a+=1a+=1 //表示a+1=a

>逻辑分支 判断语句中没有YES 和 NO,都以true 和 false 替换掉了

let a : Int = 10if a>80 {           //可以省略()   print("进来了")}//guard 的使用,guard是Swift2.0新增的语法 类似于if//oc写法func onlinre (age : Int){    if(age > 8){        print("大于8")    }else{        return    }    }//swift写法func onlinr (age : Int){    guard age > 8 else {        return    }        print("大于8")    }onlinre(age: a)onlinr(age: a)

>switch语句中break可以省略 switch后面的()也可以省略

let a = 2switch a {case 2,3:   print("hahah ")    fallthrough //这个值表示可以直接跟着下面那个条件一起成立,也就是说如果2,3满足,也会直接进行走下面的语句case 12:    print("hahah ")default:    print("nihao ");}

>关于区间 swift中的区间分为 半开半闭区间和闭区间<br> //描述0-9的所有数据<br> 1.半开半闭区间 0..<10<br> 2.闭区间 0...9<br>

>关于for循环

//表示打印0-10的所有数字,注意是三个点for i in 0...10 {    print(i)}//表示打印0-9的所有数字,注意是两个点,后面再加上运算符for i in 0..<10{    print(i)}//如果i没有被使用的话,可以在前面加上_,优点不占用内存空间for _i in 0..<10{    print("hah")}

>字符串 在oc中使用NString swift中使用String String是一个结构体,性能比OC好

let str : String = "哈哈哈"let str2 : String = "哈哈哈"print("我打印了\(str2)")//类似于oc中 NsLog("我打印了%@",str2)let a = 4;let b = 5;let ss = String(format: "%02d:%02d",a,b)//转化为 04:05print(ss)//(name as Nsstring)  as表示将String 转化为 Nsstringlet name : String = "我是唐林渊"(name as Nsstring).substring(to: 2)

>数组的几种写法

var array = ["a","b","c"]var array1 : Array<String> = ["a","c"];var array2 = [String]() array.append("哈哈")//添加 array[0] = "aa"//修改    print(array.count) //array.removeAll()//删除//遍历的两种方法//第一种只能发到对应的值for i in array {    print(i)}//第二种  既可以拿到index 也可以拿到对应的itemfor (index1,item1) in array.enumerated(){    print( String(format: "当前的下标为\(index1)当前的内容为\(item1)",index1,item1))}

>定义字典

//第一种写法var dict : Dictionary<String,Any> = ["name":"jack"];//注意如果values不确定类型的话,直接用Any表示//第二种写法var dict1 : [String:Any] = ["name":"jack"];//创建一个可变字典var dict2 = [String:Any]()//添加dict2["name"] = "jack"dict2["age"] = "18"dict2["height"] = "188"//修改dict2["name"] = "tom"//删除dict2.removeValue(forKey: "name")for item in dict2.keys {    print(item)}for (key,value) in dict2 {    let st = String(format: "这里的key=\(key),这里的value=\(value)",key,value as! String)//注意:由于写的是Any,表示任意类型,所以这一步需要转换,//as! String    表示转化为String 类型    print(st)}

>关于元组 元组类似于OC中的数组,字典

//第一种写法  可以通过位置角标直接取值let y = ("name","man","188");y.0y.1y.2//第二种写法  可以通过对应的key 直接取出相对应的值,一般使用这种let x = (name: "name",age:"18")x.agex.name//第三种写法let (name,age) = ("name","18");

>关于可选类型<br> 在OC开发中,如果一个变量暂时不适用,可以直接赋值为0,或者赋值为空<br> 在Swift开发中nil也是一个特殊的类型,不能将一个暂时不使用的变量赋值为nil,可以利用Optional或者?来代替

//var s : String = nil //错误写法//第一种可选类型的写法var s : Optional<String> = nil //初始化为nils = Optional("name") //赋值print(s!)//取值的时候,后面加上!,为了解析内容//第二种写法var y : String? = nily = "jack"print(y!)//需要注意的是加上!来解析,倘若指还是nil的话,解析会报错if(y != nil){//多加一层判断    print(y!)}if let y = y {//利用可选绑定(推荐使用)    print(y)}let s : String = "123"let a : Int? = Int(s)// 表示里面转换有可能为nil,所以类型是个可选类型print(a!)//打印结果是Optional(123)let url = URL(string: "www.baIDu.com")//也是可选类型,可以长按option+鼠标左键点击url,可以查看类型if let url = url {    print(url.absoluteString)}let dict : [String:Any] = ["name":"jack","age":18]let name = dict["name"]//长按option+鼠标左键点击url,可以查看类型为Any? 也就是说有可能中间name没有在整个字典中//结论 只要一个类型有可能为nil,那么这个标识符的类型一定是一个可选类型

>关于类型转换 as as? as! ??

let s = "123"(s as Nsstring).length //as 表示将s转化为Nsstring类型let dict : [String:Any] = ["name": "jack","age" : 18]//as?表示转化可选类型let name = dict["name"] as? String //第一种写法if let name = dict["name"] as? String {//第二种写法    print(name)}//as! 表示转化为具体的类型,如果转化不成功,系统将会直接崩溃,一般情况不使用let name1 = dict["name"] as! Stringprint(name1)//?? 下面的语句表示如果a有值,就赋值给i,如果没有值就拿?? 后面的值赋值给ivar i = Int(a) ?? 0

>函数使用

//1.没有参数,没有返回值func test(){    print("nihao ")}test()//2.有参数 没有返回值func test1(name:String){    print(name)}test1(name: "jack")//3.没有参数,有返回值func test2() -> String{    print("没有参数,有返回值")    return "哈哈"}print(test2())//4,有参数,有返回值func test3(name:String) -> String{    return name}print(test3(name: "jakctang"))func test(name : String,age:Int){    print(name)}

>关于函数参数的使用

//调用test(name: "jack",age: 12)//如果想修改外部name的名字,直接在前面加上名字即可func test1(name1 name : String,age:Int){    print(name)}test1(name1: "jack",age: 12);//调用名称就变为name1//如果要隐藏名称,直接在name前面加上下划线,可以直接将name名称隐藏掉func test2(_ name : String,age : Int){  print(name)}test2("jack",age: 12)//可变参数,比如如果要打印0-100所以的数字,后面加三个点func test3(number : Int ...){    print(number)}test3(number: 1,2,3,4,5,6)

>函数传入参数可以自动写入默认

//在类型后面加上=值,表示调用此方法如果不传值,就是用=后面的值func test(name:String = "jack"){    print(name)}test(name: "tang")test()//指针参数  在类型前面加上inout 即可var m = 20var n = 10func test2(num1 : inout Int,num2 : inout Int){        let temp = num1        num1 = num2        num2 = temp}test2(num1: &m,num2: &n)print("m:\(m) n:\(n)")

>枚举类型

//记着添加类型,不然是无法赋值的enum EnumType : String{    case NumBerType = "number"     case IntType = "int"}//第二种定义方法enum EnumType1 : String{    case NumBerType,IntType}

>关于结构体,前面用struct来修饰

struct  JackDemo{    var name : String = "jack"        mutating func changgename(n:String) {//如果要修改里面的成员属性,必须在前面添加mutating        name = n;    }    }var jack : JackDemo = JackDemo(name: "name")//结构体会自动创建几个关于变量的函数,如果要重新构造函数var jac : JackDemo = JackDemo()print(jack.name)print(jac.name)

>类的基本使用

class Demo : NSObject{    //如果属性是值类型,则初始化为空值    //如果属性是对象类型,则初始化为nil值    var name : String = ""    var age : Int = 0 {  // willSet和dIDSet 监听属性改变        willSet{                   }                dIDSet{        }    }    static var vIEw : UIVIEw? //通过类名进行访问        overrIDe init(){//系统会默认创建此构造方法,如果自定构造函数,会覆盖次方法,除非重写            }}var demo : Demo = Demo()//调用setValuesForKeys 前提是必须继承NSObject  重写super.init()  为了防止有多余的key或者报错重新 forUndefinedKeyclass Person : NSObject{    var name : String = ""    var  age : Int = 0        init(dict : [String : Any]) {//字典//        if let name = dict["name"] as? String{//            self.name = name;//        }        super.init()//必须重洗super.init()        setValuesForKeys(dict) //使用字典    }        overrIDe func setValue(_ value: Any?,forUndefinedKey key: String) {}//重写forUndefinedKey                deinit {//监听对象的销毁            }}//可选列class Person{    var b :Book?}class Book{    var n : name?}class name{    var s : String = "名字"}let p = Person()let b = Book()let n = name() n.s = "hah"p.b = bb.n = nif let name = p.b?.n?.s {//取值 *** 作    print(name)}

>protocol 来修饰一个协议,协议名称后注明给class来遵守,默认情况下,必须实现

@objc protocol onclick : class{  @objc optional func test()   func test1()}class Person : onclick{//遵守协议,默认情况,必选全部实现方法,如果想要可选实现的话,必须在类名和方法名字前面加上 @objc optional        func test() {            }        func test1() {                    }    }class Person {    weak var deletse : onclick? //可以让继承者遵守,属性最好用weak,防止循环        func test() {        deletse?.test()    }        func test1() {                    }}

>懒加载(关于懒加载的两种写法)

lazy var names : [String] = ["jack","tom"]        lazy var nbookname : [String] = { (推荐使用)        let nbname = ["ehy","assa"]        return nbname    }()            //懒加载一个控件,并且设置属性    lazy var btn : UIbutton = {        let  btn = UIbutton()         btn.setTitle("按钮",for: .normal)        return btn    }()

>Swift的权限访问<br> >internal : 内部 (默认情况所有都是internal,在本项目中就可以访问)<br> >private : 私有的 只有在本类中访问<br> >open : 公开的 可以在别的项目中也可以访问(就是说在别的包中也可以访问,例如UIbutton是一个控件,在别的包中)<br> >fileprivate : 同一个文件中

总结

以上是内存溢出为你收集整理的Swift学习笔记全部内容,希望文章能够帮你解决Swift学习笔记所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1067716.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存