标签 swift 下的文章

关于闭包的疑惑

昨天按照书上例子,按照格式写闭包,但是会报错 在这篇文章可以看到具体 has no title attribute.
今天看类这个文章 http://my.oschina.net/lanrenbar/blog/467768
原来还能用闭包来给变量赋值,这里会报错应该是不值得变量的具体类型,

var sortB = {i1,i2 in return i1 > i2}//这里会报错,因为不值得变量到底是一个闭包函数还是只是存储闭包函数返回值的变量

func sortF(sort:(Int,Int)->Bool)
{
    print("aaaa")
}
sortF({i1,i2 in return i1 > i2})//这里不会报错,因为在sortF函数中已经指定了类型

var sortC:(Int,Int)->Bool = {i1,i2 in return i1 > i2}//这里不会报错,因为变量已经指定了类型

在用变量存储闭包函数的时候,如果要简写,要写好类型

swift闭包

记录下学习swift的过程
正常闭包格式
{(参数列表) -> 返回值 in

}
如例

var sort = {(i1:Int,i2:Int)->Bool in return i1 > i2}

简化
按照案例,简化成这样

var sort = {i1,i2 in return i1 > i2}

会报错

/Users/admin/xcode/HelloYoungCoder/HelloYoungCoder/AppDelegate.swift:236:40: Ambiguous use of operator '>'

可能是因为swift版本的原因吧

疑惑的到解答 ,之前有问题的地方是用的方式不对

1,简化掉参数类型,swift支持类型推导,所以可以简化掉闭包函数参数的类型

var sortB:(Int,Int)->Bool = {i1,i2 in return i1 > i2}

2,简化掉return,因为函数主题只有一行,所以可以省略掉return

var sortC:(Int,Int)->Bool = {i1,i2 in i1 > i2}

3,简化参数名称,swift为闭包函数提供了名称缩写功能,所简化掉参数名称

var sortD:(Int,Int)->Bool = {$0 > $1}

4,利用运算符函数简化,

var sortG:(Int,Int)->Bool = (>)

类中有常量,并定义可失败构造器,报错

class TeachSchool
{
    var name : String?
    var location : String?
    var topField : String?
    let advertisement : String? //把这个常量改成变量,就好了

    //指定构造器
    init(name : String,location : String,topField : String,advertisement : String)
    {
        self.name = name
        self.location = location
        self.topField = topField
        self.advertisement = advertisement
    }
    //便捷构造器
    convenience init()
    {
        self.init(name : "蓝翔",location : "山东",topField : "挖掘机",advertisement : "挖掘机哪家强,中国山东找蓝翔")
    }
    //可失败构造器
    init? (has3IDCard : Bool)
    {
        return nil ///会报告这个错误 All stored properties of a class instance must be initialized before returning nil from an initializer
    }
    //可失败构造器
    convenience init! (isRumor : Bool)
    {
        self.init(name : "蓝翔",location : "山东",topField : "挖掘机",advertisement : "挖掘机哪家强,中国山东找蓝翔")
    }
}

最近在学习swift,看的一本书上的例子,会报错,不知道是不是版本的原因,当类的属性有常量的时候,定义可失败构造器会报错 All stored properties of a class instance must be initialized before returning nil from an initializer
这样的话,如果类的属性需要这种特性,该怎么实现呢?哪位大神知道,求告知