• 转载请注明:关东升的博客 函数的语法格式如下: func 函数名(参数列表) -> 返回值类型 { 语句组 return 返回值}关键字是func。多个参数列表之间可以用逗号(,)分隔,也可以没有参数。使用箭头“->”指示返回值...
    


    原创文章,欢迎转载。转载请注明:关东升的博客

     

    函数的语法格式如下:

    func 函数名(参数列表) -> 返回值类型 {

        语句组

        return 返回值

    }

    关键字是func

    多个参数列表之间可以用逗号(,)分隔,也可以没有参数。

    使用箭头“->”指示返回值类型。返回值有单个值和多个值。如果函数没有返回值,则“-> 返回值类型”部分可以省略。

    如果函数有返回值,就需要在函数体最后使用return语句;如果没有返回值,则函数体中可以省略return语句。

    函数定义示例代码如下:

    funcrectangleArea(width:Double, height:Double) -> Double {

        let area = width * height

        return area   

    } 

    print("320x480的长方形的面积:\(rectangleArea(320, height:480))") 

    传递参数 

    介绍几种不同形式的参数。 

    1. 使用外部参数名

    为每个参数提供一个可以在函数外部使用的名称,称为外部参数名,修改rectangleArea函数的定义如下:

    func rectangleArea(Wwidth:Double, H height:Double) -> Double {

        let area = width * height

        return area

    }

    在局部参数名之前给一个“外部参数名”,用空格分隔。定义代码中的WH就是外部参数名。调用代码如下:

    print("320x480的长方形的面积:\(rectangleArea(W:320, H:480))")

    如果我们提供了外部参数名,那么在函数调用时,必须使用外部参数名,所以WH不能省略。 

    1. 省略外部参数名

    Swift 2.0提供省略外部参数名可能,在定义函数时,使用下划线(_)表示外部参数名,示例代码如下:

    funcrectangleArea(width:Double, _ height:Double) -> Double {

        let area = width * height

        return area

    }

    这样函数在调用时就可以省略外部参数名,代码如下:

    print("320x480的长方形的面积:\(rectangleArea(320, 480))")

    在定义函数时第一个参数不需要使用下划线(_),默认第一个参数名是省略的,其他参数名要想省略则需要使用下划线(_)符号。 

    1. 参数默认值

    在定义函数的时候可以为参数设置一个默认值,当调用函数的时候可以忽略该参数。看下面的一个示例:

    func makecoffee(type :String = "卡布奇诺") -> String {

        return "制作一杯\(type)咖啡。"

    }

    在调用的时候,如果调用者没有传递参数,则使用默认值。调用代码如下:

    let coffee1 = makecoffee("拿铁")

    let coffee2 = makecoffee()  

    最后输出结果如下:

    制作一杯拿铁咖啡。

    制作一杯卡布奇诺咖啡。 

    1. 可变参数

    Swift中函数的参数个数可以变化,它可以接受不确定数量的输入类型参数,它们具有相同的类型。我们可以通过在参数类型名后面加入(...)的方式来指示这是可变参数。

    下面看一个示例:

    func sum(numbers:Double...) -> Double {

        var total: Double = 0

        for number in numbers {

            total += number

        }

        return total

    }

    下面是两次调用sum函数代码:

    sum(100.0, 20, 30)

    sum(30, 80)

    可以看到每次传递参数的个数是不同的。

     

     

    欢迎关注关东升新浪微博@tony_关东升。
    关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
     

    更多精品iOSCocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
    智捷课堂论坛网站:http://51work6.com/forum.php

    展开全文
  • 【Swift初见】Swift字典

    2015-02-27 19:33:24
    顾名思义,当我们查字典的时候,我们会根据索引去查找我们需要查找的资源,在swift中也是如此,字典的每一个对象都包含一个key和一个value,我们通过key去查找当前这个key所对应的value,与数组不同的是字典中的数据...

    顾名思义,当我们查字典的时候,我们会根据索引去查找我们需要查找的资源,在swift中也是如此,字典的每一个对象都包含一个key和一个value,我们通过key去查找当前这个key所对应的value,与数组不同的是字典中的数据项在字典中没有具体的存储顺序。

    和Swift中数组类似的,在Swift可变字典与不可变字典仅仅通过let和var的定义来区分,而在OC中是通过NSDictionary和NSMutableDictionary来区分的。

    Swift的字典定义为:(key: value),对于key和value是有限制的,key的唯一限制是可hash的,这样就能保证key是独一无二的,key的address就为:addr = hash(key) , value = hashTavle[addr],先获取到key的地址,然后在哈希表中通过找到的key的地址来找到value的值。


    字典的构造:
    与数组类似的,字典也有很多相似的语法:
    var dict = ["key1":"value1" , "key2":"value2"]
    println(dict)

    输出为:[key1: value1, key2: value2]
    我们知道swift具有类型推导的功能,我们不用定义key和value的类型,OS就能帮我们推导出key和value都是String类型。

    我们也可以在申明一个字典的时候定义好字典中key和value的类型。
    var dict2 : Dictionary<String, Int> = ["key1":1, "key2":2]
    println(dict2)

    输出为:[key1: 1, key2: 2]

    当然我们也有一种省略一点的定义方式:
    var dict3 : [String : Int] = ["key3": 3, "key4":4]
    println(dict3)

    输出为:[key4: 4, key3: 3]

    我们也可以像数组一样使用构造语句来创建一个空字典:
    var emptyDict = Dictionary<String, String>()

    此时我们就创建了一个key和value都是字符串的空字典;
    如果我们在创建字典的时候不知道要放什么类型的数据,我们也可以利用swift的类型推导功能在以后添加数据项的时候自动推导:
    var emptyDict2 = [ : ]


    数组的操作:
    对数据的基础操作包含增删改查,对字典的操作同样如此:
    对字典新增一项时,我们可以通过下标来添加新的数据项,比如对dict添加一项:
    dict["key3"] = "value3"
    println(dict)

    此时dict中有三项了,输出为:[key1: value1, key3: value3, key2: value2]

    修改字典中某一项的值时也可以用下标来进行操作:
    dict["key1"] = "NOValue"
    println(dict)

    此时的输出就为:[key1: NOValue, key3: value3, key2: value2]
    swift还提供了一个updateValue的方法来更新字典中的值,
    dict.updateValue("123", forKey: "key4")
    println(dict)

    如果key存在则更新key所对应的value,如果key不存在则新增一条记录。

    和数组一样,我们可以通过字典的只读熟悉count来获取字典中的数据项的数量。

    如果我们需要从一个字典中移除某个数据项,有这么2种方式:
    1、用下标的方式来给某个键的对应值赋值为nil,这个该数据项就从字典中移除了:
    dict["key4"] = nil
    println(dict)

    从输出中我们可以明显的看出key4所对应的数据项已经从字典中移除掉了;
    2、用swift提供的函数:removeValueForKey:
    dict.removeValueForKey("key1")
    println(dict)

    3、用removeAll方式来移除所有数据项。


    字典遍历
    还记得在数组的遍历中有2种方式,一种是for-in循环来遍历,一种是enumerate来遍历数据项和索引返回一个元祖,在字典的遍历中有下面几种方式:
    1、for-in循环:
    var dict = ["key1" : "value1" , "key2" : "value2" , "key3" : "value3"]
    
    for key in dict{
        println(key)
    }
    
    for (key,value) in dict{
        println("key is \(key) and value is \(value)")
    }
    
    for (key, _) in dict {
        println(key)
    }
    
    for (_, value) in dict {
        println(value)
    }


    输出为:

    (key1, value1)
    (key3, value3)
    (key2, value2)
    key is key1 and value is value1
    key is key3 and value is value3
    key is key2 and value is value2
    key1
    key3
    key2
    value1
    value3
    value2


    我们看到这几种方式,第一种直接打印出键值对的值,第二种我们的条件里面写了一个元组,分别打印key和value,第三种我们加了一个下划线,表示我们不关心第二项value的值,我们只要第一项,第四种方式即我们只关心value的值:


    2、我们可以通过字典的keys熟悉来返回当前字典的所有的key,同样可以返回字典的所有value,
    for keys in dict.keys {
        println(keys)
    }
    
    for values in dict.values {
        println(values)
    }

    字典的keys和values返回的是一个集合,我们可以直接使用keys或者values属性来构造一个新数组:
    let keysArray = Array(dict.keys)
    println(keysArray)

    字典中的数据项是无序排列的,当我们遍历字典的时候,key和value会重新排列,而且其中的顺序是不固定的。



    欢迎大家指导,共同学习。





    展开全文
  • 重载: 方法名相同,参数个数/参数类型不同 方法重载不仅仅局限于 init构造方法,其他的方法也同样使用 在init的构造方法中, 不需要在前面加func , 重写init需要添加关键字override . 在init方法中,需要在...

    重载方法名相同,参数个数/参数类型不同

    方法重载不仅仅局限于 init构造方法,其他的方法也同样使用


    在init的构造方法中, 不需要在前面加func , 重写init需要添加关键字override . 在init方法中,需要在super.init之前完成初始化,这点与OC不同

    重写是因为,系统提供的方法不能满足我们对属性的初始化的需要,在对属性初始化时,一定要用self声明属性是谁的,以防止赋值混淆

    注: Xcode 7 bate 5 之后, 系统会默认 为我们调用super.init   不过, 建议熟练之前, 写上


    KVC构造函数注意点: 基本数据类型不与KVC 兼容, 在KVC动态赋值的时候,找不到这个属性. 

    解决办法: 在定义一个基本数据类型的同时设置默认值, 才能在KVC动态赋值的时候查找到这个属性 

    例如: var age: Int = 0

    KVC属性赋值的原理系统在运行时的时候,会动态的给 对象发送setValue forKey 这个方法,来给属性赋值

    KVC属性赋值满足的2个条件: 1.对象得创建完成 2.属性完成初始化

    init(dict: [StringAnyObject]){

    super.init()

    setValuesForKeysWithDictionary(dict)

    }

    同时为防止属性赋值,出现未定义的属性赋值产生崩溃,最好重写 forUndefinedKey 方法

    forUndefinedKey 这个方法就是 字典里的key 找不对应的属性,就会抛出一个异常,如果我们重写这个方法,不调用父类方法,就可以不抛出异常

    override func setValue(value: AnyObject?, forUndefinedKey key: String) {

    } //里面什么也不要写


    ArticleListModel.swift里的模型文件:

    import UIKit


    class JFArticleListModel: NSObject {

        

        /// 作者昵称

        var username: String?

        

        /// 点击量

        var onclick: String?

        

        /// 发布时间

        var newstime: String?

        

        /// 创建文章时间戳

        var created_at: String?

        

        /// 文章id

        var id: String?

        

        /// 文章标题

        var title: String?

        

        /// 标题图片url

        var titlepic: String?

        

        /// 文章简介

        var smalltext: String?

        

        /// 数据表名

        var table: String?

        

        /// 父栏目id

        var bclassid: String?

        

        /// 当前栏目id

        var classid: String?

        

        /// 当前栏目名称

        var classname: String?

        

        /// 评论数量

        var plnum: String?

        

        /// 标题图片数量

        var piccount: Int = 0

        

        /// 多图数组 存储多张标题图片url的数组

        var morepic: [String]?

        

        /// 存储形变改变的偏移量

        var offsetY: CGFloat = 0

        

        /// 缓存行高

        var rowHeight: CGFloat = 0.0

        

        /**

         字典转模型构造方法

         */

        init(dict: [String : AnyObject]) {

            super.init()

            setValuesForKeysWithDictionary(dict)

        }

        

        override func setValue(value: AnyObject?, forUndefinedKey key: String) {}

        

    }


    NewsTableViewController.swift里的方法:


       // 字典转模型

    let postModel = ArticleListModel(dict: dict)

                            



     var dict: [String : AnyObject] = [

                                "title" : article["title"].stringValue,          // 文章标题

                                "bclassid" : article["bclassid"].stringValue,    // 终极栏目id

                                "classid" : article["classid"].stringValue,      // 当前子分类id

                                "newstime" : article["newstime"].stringValue,    // 发布时间

                                "created_at" : article["created_at"].stringValue,// 创建文章时间戳

                                "username" : article["username"].stringValue,    // 用户名

                                "onclick" : article["onclick"].stringValue,      // 点击量

                                "smalltext" : article["smalltext"].stringValue// 简介

                                "id" : article["id"].stringValue,                // 文章id

                                "classname" : article["classname"].stringValue// 分类名称

                                "table" : article["table"].stringValue,          // 数据表名

                                "plnum" : article["plnum"].stringValue,          // 评论数量

                            ]



    展开全文
  • 自学swift3.0,如果有什么错误或建议的话欢迎吐槽哦~ //1.字典的定义使用[key:value,key:value]快速定义 let dic:[String:Any] = ["name":"张三","age":22] print(dic) //数组字典 let arrDic:[[String

    自学swift3.0,如果有什么错误或建议的话欢迎吐槽哦~

            //1.字典的定义使用[key:value,key:value]快速定义
            let dic:[String:Any] = ["name":"张三","age":22]
            print(dic)
            
            //数组字典
            let arrDic:[[String:Any]] = [
                ["name":"张三","age":22],
                ["name":"李四","age":24]
            ]
            print(arrDic)
            //2.可变字典的增删改查
            var dictionary:[String:Any] = ["name":"张三","age":22]
            print(dictionary)
            
            /*
             key存在则为修改,key不存在 则为添加
             */
            //增加键值对
            dictionary["score"] = 99
            print(dictionary)
            
            //修改键值对
            dictionary["age"] = 33
            print(dictionary)
            
            //删除键值对
            // ps: 字典是通过KEY来定位值的,所有的KEY必须是可以 hash/哈希 的 (md5就是一种哈希,哈希就是将字符串变成唯一的整数,便于查找,能够提高字典遍历的速度)
    //        dictionary.removeValue(forKey: <#T##Hashable#>)
            
            dictionary.removeValue(forKey: "score")
            print(dictionary)
            
            //字典遍历
            //写法一
            for e in dictionary {
                print("key = \(e.key)   value = \(e.value)")
                
            }
            
            //写法二
            for (key,value) in dictionary {
                print("key = \(key)   value = \(value)")
            }
            
            //字典合并
            var dic1 = ["name":"小明","score":"88"]
            print(dic1)
            let dic2 = ["teacher":"老大"]
            
            for (key,value) in dic2 {
                dic1[key] = value
            }
            print(dic1)
    



    展开全文
  • 无论是C语言还是C++的函数都只能返回一个参数,但是swift现在提供了一个特性就是可以直接返回多个参数。我们以前在oc礼拜呢返回多个参数是怎么整的呢,一般是把多个参数放入字典或者数组中。有了swift这个特性我们...

    无论是C语言还是C++的函数都只能返回一个参数,但是swift现在提供了一个特性就是可以直接返回多个参数。我们以前在oc礼拜呢返回多个参数是怎么整的呢,一般是把多个参数放入字典或者数组中。有了swift这个特性我们可以解放了,��。
    函数的定义
    这里写图片描述
    函数的调用
    这里写图片描述

    展开全文
  • 有些情况下在Swift中想让Dictionary某个Key为空值,比如在与服务器交互时,有些参数无论有没有值必须要求.但如果给字典的key赋值为nil,字典则会移除这个键值对,如下: var dict1=Dictionary() dict1["name"]="Jack" ...
  • Swift--字典

    2014-06-22 13:14:08
    字典  字典是一种存储相同类型多重数据的存储器。每个值(value)都关联独特的键(key),键 作为字典中的这个值数据的标识符。...Swift字典使用时需要具体规定可以存储键和值类型。不同于 Object
  • Swift字典有个删除方法叫removeAtIndex的方法参数居然是个index ///Removethekey-valuepairatindex`i` /// ///Invalidatesallindiceswithrespectto...
  • Swift字典具有以下特点: 字典由两种范型类型组成,分别是Key(必须实现Hashable协议)和Value 提供一组Key和Value,可以向字典中插入一条新的数据 如果Key已经被插入字典,则可以通过Key获取到Value 可以通过Key...
  • Swift中,数组Array和字典Dictionary是用结构来实现的,但是数组与字典和其它结构在进行赋值或者作为参数传递给函数的时候有一些不同。 并且数组和字典的这些操作,又与Foundation中的NSArray和NSDictionary不同,...
  • Swift-字典(Dictionary)

    2017-04-20 09:46:52
    字典(Dictionary) 字典是一种存储多个相同...我们在需要通过标识符(键)访问数据的时候使用字典,这种方法很大程度上和我们在现实世界中使用字典查字义的方法一样。 注意:Swift 的Dictionary类型被桥接到Found
  • 字典是无序的键值对数组集。Swift的Array、Set和Dictionary类型被实现为泛型集合。因此,它所存储的元素的类型必须是一致的,同样,我们取出来的数据类型也是明确的。集合的可变性(Mutability Of Colle
  • let sortedKeys = Array(params.keys).sorted()
  • importUIKit /* 字典的介绍 1.字典允许按照某个键访问元素 2.字典是由两部分组成,一个键(key)集合,一个是值(value)集合 ...4.Swift字典类型是Dictionary也是一个泛型集合 5.字典分为可变字典和...
  • Swift字典

    2015-10-10 12:57:14
    本文主要是对swift字典类型的介绍
  • Swift调用OC之NSDictionary

    2015-03-08 09:55:22
    // Swift调用OC之NSDictionary // // 1.NSArray与Array的互相转换 // 2.NSDictionary初始化 // 3.NSDictionary常用的属性和方法 // --获得成员个数 // --获取Key或Value组成的数组(swiftDictiona
  • swift3 模型转字典(JSON)

    2017-08-10 17:21:53
    项目中最近需要将一个复杂的对象转成JSON,于是就利用Mirror写了一个模型转字典的通用方法,应该可以满足大部分使用场景下的需求了 函数实现: func convertToDictNesting(obj: Any, remainFeild: [String]? = nil, ...
  • Swift字典

    2014-09-07 21:56:27
    在Foundation框架中提供一种字典集合,它是由“键-值”对构成的集合。键集合不能重复,值集合没有特殊要求。键和值集合中的元素可以是任何对象,但是不能是nil。Foundation框架字典类也分为NSDictionary不可变字典和...
  • swift NSDictionary(字典)

    2016-01-15 10:00:03
    2、NSDictionary(字典)  //创建空字典   let emptyDictionary = DictionaryString, Float>()    //  字典被定义为 Dictionary ,这意味着这个字典的键是 String类型和值是Int类型
  • Alamofire的get请求,post请求,以及上传字典
1 2 3 4 5 ... 20
收藏数 5,510
精华内容 2,204
热门标签