美文网首页
Swift中的Optional以及函数

Swift中的Optional以及函数

作者: 婉卿容若 | 来源:发表于2016-06-02 09:26 被阅读196次

    5.31

    计划

    唐巧烧脑体操1-2

    总结

    体操一 总结: Optional
    • Optional多层嵌套容易出错,尽量避免使用
    • Optional可以接收非Optional的值
    • Optional存在两个构造函数,当类型不匹配时系统会调用对应的构造方法进行构造
    
    public enum Optional<Wrapped> : _Reflectable, NilLiteralConvertible {
        case None
        case Some(Wrapped)
        
        @available(*, unavailable, renamed="Wrapped")
        public typealias T = Wrapped
        
        /// Construct a `nil` instance.
        @_transparent
        public init() { self = .None }
        
        /// Construct a non-`nil` instance that stores `some`.
        @_transparent
        public init(_ some: Wrapped) { self = .Some(some) }
        
    }
    

    源码地址

    • 删除字典元素时应注意value的类型,根据源码知value类型为String?时,她接收的是String??类型的参数.但是,我们给value赋值nil总是不会错的
     public subscript(key: Key) -> Value? {
        get {
          return _variantStorage.maybeGet(key)
        }
        set(newValue) {
          if let x = newValue {
            // FIXME(performance): this loads and discards the old value.
            _variantStorage.updateValue(x, forKey: key)
          }
          else {
            // FIXME(performance): this loads and discards the old value.
            removeValueForKey(key)
          }
        }
      }
    

    源码地址

    体操二 总结: 函数

    函数编程:
    数据与函数是低耦合的
    函数隐藏了它们的实现,语言的抽象是函数,以及将函数组合起来表达。
    核心抽象模型是函数,不是数据结构
    核心活动是编写新的函数。
    变量缺省是不变的,减少可变性变量的使用,并发性好


    函数是"第一等公民"
    所谓"第一等公民"(first class),指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值。

    • Swift中数组的map、filter、reduce等就是函数式编程最直观的应用
    • 低耦合很重要,个人认为编程中不断追求低耦合就会想函数式编程靠拢
    • 泛型在函数式编程的运用,让函数适应各种数据类型,使用范围更广
    • 用函数做参数、返回值会让程序可读性降低,typealias的运用显得重要
    • 摸清自己的习惯,尽量向约定俗成的规范靠拢,不要一味追求精简,该写的参数、返回值等还是要写上

    延伸学习

    一个可以抛出的方法实际上做的事情是执行一个闭包,接着选择返回一个值或者是抛出一个异常

     let fileManager = NSFileManager.defaultManager()
     let url: NSURL = NSURL(fileReferenceLiteral: "http://www.ibm.com/developerworks/cn/mobile/mo-cn-swift/index.html")
     do{
            try fileManager.copyItemAtURL(url, toURL: url)
     }catch let error as NSError{
          print("cuo le: \(error.localizedDescription)")
     }        
    

    相关文章

      网友评论

          本文标题:Swift中的Optional以及函数

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