澳门在线威尼斯官方 > 澳门在线威尼斯官方 > 学学笔记

原标题:学学笔记

浏览次数:183 时间:2019-10-06

最近在IMOOK(网站)上自学了下swift , 总结下swift相对其他语言的不同之处 , 方便熟悉其他语言的程序员,熟悉swift语言的特性.

 

  1. swift 的特别之处就是可以在原有的类上 , 使用 protocol (类似java接口) 获得泛型的作用 . 

  2. 通过extension可以扩展普通的class, struct, 也可以扩展protocol, 使用protocol类都拥有公共的扩展.

 

 1 protocol Readable { 
 2 
 3       var programLang:String
 4        
 5       var programeSourceUrl:String
 6 
 7       var maxExecuteSecounds:Long
 8 
 9 }
10 
11 protocol Execuable {
12      func execute() 
13 }
14 
15 
16 
17 class BrowserScript  : Readable {
18 
19           var progameLang:String = "js"
20           var programeSourceUrl:String = "http://xxxx.com/adfd.js"
21           var maxExecuteSecounds:Long=20
23           init() {
24               println("browser script init")
25          }
26 
27 
28          execute
29 
30 }  
31 
32 extenstion BrowserScript:Executable {
33      execute() {
34         JavaCoreScript.run(programeSourceUrl);
35      }
36 }
37 
38 
39 //test:
40 
41 func executeTask<T:Executable>(executor:T) {
42     executor.execute();
43 }
44 
45 
46 executeTask(BrowserScript());  //不会报错
47 
48 
49  

 通过协议再不修改BrowserScript类定义文件的前提下, 为BrowserScript增加了execute的能力.
 extenstion 可以用在ios内置,各种库,自己编写的任意类,函数体,Enum,因为基本数据类型实际是结构体,所以也可以extension功能.

 在swift官方的实现中大量使用extension实现功能,swift是面向协议扩展的语言.

 

  1. swift的问号

   swift 问号类似 var card:String? ,有问号表示这个变量可以为空(nil),实际也是Optional枚举类型,有值时候用Optional.Some()包装,使用时候需要解包,如果为nil实际为Optional.None().

   解包的方法就是

 

 if let card = card {
     println("your card is ",card);
  }  

 

  1. Int,Long,String,Dictionary,Array 其实都是结构体,struct.

  结构体和类的区别就是,结构体传值都是内存拷贝, 类引用一般都是引用.

 

  1. weak 关键字.

  weak 关键字表示弱引用, 就是拥有这个weak变量的对象不持有这个变量的引用.引用计数是内存回收的一种方法,为0时系统负责回收内存,如果对象A包含属性B强引用属性,直接a=nil, B 不会回收. 如果属性B设置为弱引用,本身设置属性b, b的引用计数不增长. weak用在此属性可以为空的情况.

6.unowned 关键字. 

  unowned 相当于weak,不过这个属性不能为空.属性被设置为空,程序崩溃直接退出.所以很少用.

  1. 函数/方法.

   7.1 方法定义:

func method1(_ x1:Int,_ x2 :Int) ->Int {

      //do something 
}

var  sum = method1(1,2);

上面的参数中的下划线是外参数名 ,位置在形参x1前面 ,如果是下划线,表示调用时候不用写外参名称.如果是有名字,调用时候需要写外参数名,加入第二个参数的下划线替换成num2,调用时需要写成:

澳门在线威尼斯官方 , 

var sum2 = method1(1,num2:2);

 

最后的->表示之后跟着的是返回值 ,返回值可以是一个值,也可以是函数(方法).

 

方法可以直接写闭包(匿名函数) .

 

举例: 学生报名到学校, 返回流程处理函数, 具体就是执行了发送短信叫家长交学费. 返回的函数参数是家长的相关联系方式. 

func add(student:Student,to school:School) ->(String)->{sendMsgToParentsFee($0);}

上面的返回值是最后那个参数是String类型,具体执行是{}包含着的函数.里面的$0 表示参数中的第一个参数,多个参数依次累加表示.

 

调用 : 

    x.add(student:studentObj,to:schoolObj)

 

本文由澳门在线威尼斯官方发布于澳门在线威尼斯官方,转载请注明出处:学学笔记

关键词:

上一篇:没有了

下一篇:没有了