option参数 swift_swift option protocol - CSDN
  • 关于Swift 参数可选和必选的区别 很多小伙伴会遇到这样的问题 意思就是,你必须给我确定的类型String 不能为空, ‘nil’ cannot be assigned to type ‘String’。 参数 var str001:String var str002:String? ...

    关于Swift 参数可选和必选的区别
    很多小伙伴会遇到这样的问题
    在这里插入图片描述
    意思就是,你必须给我确定的类型String 不能为空, ‘nil’ cannot be assigned to type ‘String’。

    参数

    var str001:String
    var str002:String?
    
    str001 = nil //这个是报错的是 'nil' cannot be assigned to type 'String'
    str002 = nil
    
    str001 = "str001"
    str002 = "str002"
    

    方法

    let string:String? = nil
    //参数 可选
    func add(str:String?){
        
    }
    //参数 必选
    func add1(str:String){
        
    }
    
    add(str: string)
    add1(str: string ?? "") 
    

    add 方法是你给我字符串和空都可以
    add1方法是你给我必须是字符串类型

    附录:我朋友(panway)的理解

    如果你不确定是不是为空,就用??给个默认值

    var filePath : String = self.item?.href ?? ""
    
    

    如果你100%确定self.item有值,那么你可以用!(force unwrap self.item)

    var filePath : String = self.item!.href
    
    

    我一开始好奇为什么filePath不能为空,OC时代为空代码可以继续啊,结果发现filePath可以为空:

    var filePath : String? = self.item?.href
    
    

    这样是可以,但是下面用到 filePath 的时候(比如filePath是某个方法的参数,但是这个方法不需要你这个“可能为空可能不为空”的玩意,人家要100%非空的),所以编译器还是会给你报错,让你处理成非空的值传进去,所以老哥,早晚都要做的事情,还是提前做了吧

    展开全文
  • 在前面我们把继承这东西讲解完了, 本质上是和OC中的...Swift中的初始化其实和OC的初始化没多大区别, 但唯一不同的就是, Swift在构造的过程是不需要返回值的, 只要保证新实例在第一次使用的时候能够正确的完成初始...

    在前面我们把继承这东西讲解完了, 本质上是和OC中的继承是没有多大区别的, 就是多了一些特性, 一开始不记得没关系, 后面随着我们做项目, 越做会越熟练的, 好了, 现在让我们来继续往下看:


    1.初始化

    Swift中的初始化其实和OC的初始化没多大区别, 但唯一不同的就是, Swift在构造的过程是不需要返回值的, 只要保证新实例在第一次使用的时候能够正确的完成初始化就可以了.

    类和结构体在初始化的时候, 必须为所有存储型属性设置合适的默认值.

    PS: 如果我们为存储型属性设置默认值, 或者在初始化方法中给存储性属性赋值, 是不会触发任何属性观测器的.

    例子:

    struct Fahrenheit {
        var temperature: Double
            init() {
                temperature = 32.0
            }
    }
    
    var f = Fahrenheit()
    println("The default temperature is \(f.temperature)° Fahrenheit")
    // 打印出来的结果: The default temperature is 32.0° Fahrenheit

    2.默认属性值

    所谓的默认属性值, 就是在我们的初始化方法中所存储的数值, 比如:

    struct Fahrenheit {
        var temperature = 32.0
    }

    PS: 例子中的temperature的默认值就是32了.


    3.初始化的参数

    在我们初始化的过程中, 我们可以加入一些参数和可选属性类型来定制我们需要的初始化方法, 也可以在初始化方法中对常量进行修改, 比如:

    struct Celsius {
        var temperatureInCelsius: Double = 0.0
        init(fromFahrenheit fahrenheit: Double) {
            temperatureInCelsius = (fahrenheit - 32.0) / 1.8
        }
        init(fromKelvin kelvin: Double) {
            temperatureInCelsius = kelvin - 273.15
        }
    }
    
    let boilingPointOfWater = Celsius(fromFahrenheit: 212.0)
    println(boilingPointOfWater.temperatureInCelsius)
    // 打印出来的结果: 100.0
    let freezingPointOfWater = Celsius(fromKelvin: 273.15)
    println(freezingPointOfWater.temperatureInCelsius)
    // 打印出来的结果: 0.0

    PS: 仔细的人会按着 Option 键去看看 fahrenheit 和 kelvin 是什么类型, 一旦我们查看到之后, 我们就发现, 原来这两个形参都是 let 类型.


    4.内部和外部参数

    与方法, 函数一样, 初始化的时候, 我们可以添加外部参数, 这样子我们就可以在初始化的时候, 一次性初始化我们需要的多个默认属性或者是默认值, 比如:

    struct Color {
        let red = 0.0, green = 0.0, blue = 0.0
        init(red: Double, green: Double, blue: Double) {
            self.red = red
            self.green = green
            self.blue = blue
        }
    }
    
    let magenta = Color(red: 1.0, green: 0.0, blue: 1.0)
    println("\(magenta.red), \(magenta.green), \(magenta.blue)")
    // 打印出来的结果: 1.0, 0.0, 1.0

    PS: Swift 会为每个构造器的参数自动生成 一个跟内部名字相同的外部名, 就相当于在每个构造参数之前加了一个哈希符号, 如果你不希望为构造器的某个参数提供外部名字, 你可以使用下划线 ‘_’ 来显示描述它的外部名, 以此覆盖上面所说的默认行为.


    5.可选属性类型

    如果我们在定义初始化方法的时候, 有一个允许取值为空的存储型属性, 不管它是在初始化时赋值, 还是在调用的时候复制, 我们都必须给它设置成可选类型, 因为可选类型会自动初始化为空, 比如:

    class SurveyQuestion {
        var text: String
        var response: String?
        init(text: String) {
            self.text = text
        }
        func ask() {
            println(text)
        }
    }
    let cheeseQuestion = SurveyQuestion(text: "Do you like cheese?")
    cheeseQuestion.ask()
    // 打印出来的结果: Do you like cheese?
    
    cheeseQuestion.response = "Yes, I do like cheese."
    println(cheeseQuestion.response)
    // 打印出来的结果:Optional("Yes, I do like cheese.")

    PS: 这个模式就类似于问答卷一样, 先知道问题, 然后由我们去回答, 如果不回答, 那么默认就是空的.


    好了, 这次我们就讲到这里, 下次我们继续

    转载于:https://www.cnblogs.com/iOSCain/p/4529357.html

    展开全文
  • UIView.animate 参数说明: 1. withDuration: TimeInterval 动画执行时间 2. delay:TimeInterval 动画延迟执行时间 3. usingSpringWithDamping: CGFloat 弹簧阻力,取值范围为0.0-1.0,数值越小“弹簧”振动效果越明...
        

    概述

    UIView.animate 参数说明:

    1. withDuration: TimeInterval  动画执行时间
    2. delay:TimeInterval          动画延迟执行时间
    3. usingSpringWithDamping: CGFloat  弹簧阻力,取值范围为0.0-1.0,数值越小“弹簧”振动效果越明显。   
    4. initialSpringVelocity: CGFloat   动画初始的速度(pt/s),数值越大初始速度越快。但要注意的是,初始速度取值较高而时间较短时,也会出现反弹情况。 
    5. options: UIViewAnimationOptions     运动动画速度曲线  
    6. animations: () -> Void           执行动画的函数,也是本动画的核心
    7. completion: ((Bool) -> Void)?    动画完成时执行的回调,可选性,可以为 nil
    

    初始化

    分别有以下初始化方式:

    • 最简单的初始化方式:
    UIView.animate(withDuration: TimeInterval, animations: () -> Void)

    此方法定义了动画执行时间和执行的函数

    • 执行动画和执行完动画执行的函数
    UIView.animate(withDuration: TimeInterval, animations: () -> Void, completion: ((Bool) -> Void)?)
    • 复杂动画
    UIView.animate(withDuration: TimeInterval, delay: TimeInterval, usingSpringWithDamping: CGFloat, initialSpringVelocity: CGFloat, options: UIViewAnimationOptions, animations: () -> Void, completion: () -> Void?)

    参数详解

    参数 1 跟 2 比较简单分别代表 动画执行时间 和 动画延迟执行时间
    参数3 usingSpringWithDamping 官网上解释是动画接近静止状态时的阻尼比,取值范围是0~1,阻尼比越大,动画越平稳,反之震荡越严重,效果如图
    图片描述

    参数4 initialSpringVelocity 初始速度,值越大,越快,官网上举了个例子:如果总动画距离为200点,并且您希望动画的开头匹配100pt / s的视图速度,则使用值0.5。反正我也不太明白,不过根据我自己理解,如果动画执行时间一样,如果初始速度越大,会动画的幅度会更大,也就是走更越的距离,效果如图:
    图片描述

    参数5 options 我自己理解是动画执行的速度曲线, 对于速度曲线其实都是贝塞尔函数,这里有一个缓动函数速查表可以查看常用的速度曲线

    参数6 animations 就是要执行的函数了,可以改变 UIView 的 大小,颜色,位置,缩放,旋转等说起来又是一大堆,这里就不详细说这个了

    参数7 completion 执行完动画的回调,可以是nil

    结尾及源码

    关于 UIView.animate 的参数大概就说这么多了,喜欢请收藏,想要源码的话请移步这里

    展开全文
  • 闭包只有在函数中做参数时才会区分逃逸闭包和非逃逸闭包。 Swift 3.0之后,传递闭包到函数中的时候,系统会默认为非逃逸闭包类型(NonescapingClosures)@noescaping,逃逸闭包在闭包前要添加@escaping关键字。 从...

    闭包只有在函数中做参数时才会区分逃逸闭包和非逃逸闭包。

    Swift 3.0之后,传递闭包到函数中的时候,系统会默认为非逃逸闭包类型(NonescapingClosures)@noescaping,逃逸闭包在闭包前要添加@escaping关键字。

    从生命周期看两者区别:

    非逃逸闭包的生命周期与函数相同:

    1,把闭包作为参数传给函数;

    2,函数中调用闭包;

    3,退出函数。结束

    逃逸闭包的生命周期:

    1,闭包作为参数传递给函数;

    2,退出函数;

    3,闭包被调用,闭包生命周期结束

    即逃逸闭包的生命周期长于函数,函数退出的时候,逃逸闭包的引用仍被其他对象持有,不会在函数结束时释放

    例如:

    非逃逸闭包:
    在这里插入图片描述
    在这里插入图片描述

    代码执行顺序(1),(2),(3)

    当传递闭包参数给函数loadData时,要注意ViewController中的属性tools,虽然闭包会捕获self,但是由于默认闭包参数是非逃逸型,这里可以省略self,编译器已经知道这里不会有循环引用的潜在风险。

    逃逸闭包:

    在这里插入图片描述
    在这里插入图片描述

    代码执行顺序:(1),(3),(2)

    当传递闭包参数给函数loadData时,要注意ViewController中的属性tools,这里闭包函数的生命周期在函数结束后结束,tools前面省略的self 就有必要做特殊处理,防止造成死循环。逃逸闭包前面添加@escaping关键字,这里闭包的生命周期不可预知。

    经常使用逃逸闭包的2个场景:

    异步调用: 如果需要调度队列中异步调用闭包,比如网络请求成功的回调和失败的回调,这个队列会持有闭包的引用,至于什么时候调用闭包,或闭包什么时候运行结束都是不确定,上边的例子。
    存储: 需要存储闭包作为属性,全局变量或其他类型做稍后使用,例子待补充。

    作者:我是闰土你是猹
    来源:CSDN
    原文:https://blog.csdn.net/qq_30932479/article/details/80517518
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • Swift的初始化, 默认属性值, 初始化参数, 内部和外部参数, 可选属性类型
  • Swift是苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C共同运行于MAC OS和iOS平台,用于搭建基于苹果平台的应用程序。 2、举例说明Swift里面有哪些是 Objective-C中没有的? Swift...
  • 每当看到新的编程语言我总是会有相当大的兴趣,是的,Swift 3是一门『新语言』,因为它看起来,怎么都不像过往的 Swift。打开一个老的项目时,发现满目疮痍,基本上能标红的代码全被标红了。先来个截图提提神: 图...
  • ProtocolClass2.swift import UIKit //定义协议 protocol ProClassDelegate { //代理函数 func test(name:String,type:Int) func test2() } class ProtocolClass2: NSObject { //声明类的代理属性变量名
  • //***********swift--1.3--可选类型--*************************** // (Optionals)即在某个数据类型后面加上问号(?)或感叹号(!) // Int和String类型不能接受nil的,但程序运行过程中有时被复制给nil...
  • Swift之 ? 和 !

    2016-02-24 16:07:38
    Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化。如果在使用变量之前不进行初始化就会报错: var stringValue : ...
  • Swift REPL简介

    2016-09-19 22:07:50
    Swift REPL简介
  • 定义格式(注意:【】内可以省略): 常量:let 常量名称【:常量类型】= 值 变量:var 变量名称【:变量类型】= 值注意...可以省略类型:swift中有类型推导机制,会自动根据值推导出相应的类型 4.常用option键来...
  • Swift可选类型(option) 导语 在swift快速入门时,发现自己很难理解可选类型 所以本文通过一些类的互相调用来加强对可选类型的理解 本文涉及的内容有 类,构造函数,可选类型的定义和使用
  • swift 方法注释快捷键

    2019-07-16 15:14:39
    command + Option + / 快捷键 建议自己写的函数都用此方法进行注释 包含了 参数是什么 返回值是什么 函数功能是什么
  • let number = "123" // let number = "hello"  let convertNumerber = Int(number)    if (convertNumerber != nil) {    print("convertNumber is ...\(convertNumerber
  • 对于新手(如笔者)来说,闭包是Swift语言特性中很难理解的一部分。其原因可能有一部分在于一些人把复杂的函数写得很简单,新手会看不懂。闭包可以理解为把函数...我们知道Swift采用了一种非常安全的称之为Option...
  • Swift中,这句话就代表一个程序,和OC不一样,如果你使用Xcode创建一个项目,你会发现没有main函数了,Swift将全局范围内的首句可执行代码作为程序入口(实际上main函数还是存在的,只是Swift对其做了优化) ...
  • Swift Protocol 详解 - 协议&面向协议编程 之前一个帖子我总结了自己秋招面试经历,作为一个Swift开发者,有一个非常高频的问题就是:你觉得Swift相比于其他语言(或者OC来说)的特点和优势是什么?作为一个见识...
  • 函数类型是由函数的参数类型和返回值类型组成的 */// 这两个函数的类型是 (Int, Int) -> Int func sum(a: Int, b: Int) ->Int { return a + b; }func sub(a: Int, b: Int) ->Int { return a - b; } // 可以利用函数...
  • 目录 函数的定义 隐式返回 返回元组:实现多返回值...Swift自带的print函数 输入输出参数(In-Out Parameter) 函数重载(Function Overload) 内联函数 @inline 函数类型(Function Type) 函数类型作为函...
1 2 3 4 5 ... 20
收藏数 1,733
精华内容 693
关键字:

option参数 swift