金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > 编程 > 加入特斯拉,装饰器全解

加入特斯拉,装饰器全解

发布时间:2019-11-19 08:33编辑:编程浏览(165)

    本章结构:

        2010 年 7 月,Chris 开始着手 Swift 编程语言的设计工作,用一年时间奠定了基本架构。后来他又领导一个团队投入到 Swift 的研发中。2014 年 6 月,Apple 在 WWDC 上正式对外宣布了 Swift 语言。2015 年 12 月 3 日, Apple 宣布开源 Swift。

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

    1.理解装饰器的前提准备

     

    2.装饰器:无参/带参的被装饰函数,无参/带参的装饰函数

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

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

    3.装饰器的缺点

     

    4.python3的内置装饰器

     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  
    

    5.本文参考

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

     

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

    理解装饰器的前提:1.所有东西都是对象(函数可以当做对象传递) 2.闭包

     

    闭包的概念:
    1)函数嵌套
    2)内部函数使用外部函数的变量
    3)外部函数的返回值为内部函数

    1. swift的问号

    下面写一个最为简单的闭包的例子:

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

    1 def test(name):
    2     def test_in():
    3         print(name)
    4     return test_in
    5 
    6 func = test('whyz')
    7 func()
    

       解包的方法就是

    装饰器的原型:

     

     1 import time
     2 def showtime(func):
     3     def wrapper():
     4         start_time = time.time()
     5         func()
     6         end_time = time.time()
     7         print('spend is {}'.format(end_time - start_time))
     8 
     9     return wrapper
    10 
    11 def foo():
    12     print('foo..')
    13     time.sleep(3)
    14 
    15 foo = showtime(foo)
    16 foo()
    
     if let card = card {
         println("your card is ",card);
      }  
    

    不带参数的装饰器:(装饰器,被装饰函数都不带参数)

     

     1 import time
     2 def showtime(func):
     3     def wrapper():
     4         start_time = time.time()
     5         func()
     6         end_time = time.time()
     7         print('spend is {}'.format(end_time - start_time))
     8 
     9     return wrapper
    10 
    11 @showtime  #foo = showtime(foo)
    12 def foo():
    13     print('foo..')
    14     time.sleep(3)
    15 
    16 @showtime #doo = showtime(doo)
    17 def doo():
    18     print('doo..')
    19     time.sleep(2)
    20 
    21 foo()
    22 doo()
    
    1. Int,Long,String,Dictionary,Array 其实都是结构体,struct.

    带参数的被装饰的函数

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

    本文由金沙国际官网发布于编程,转载请注明出处:加入特斯拉,装饰器全解

    关键词:

上一篇:所以永恒,0服务端开发

下一篇:没有了