zoukankan      html  css  js  c++  java
  • Swift学习之函数和简单地控件的创建

       今天还是重复昨天做的事情--敲代码,但唯一的不同就是所学的知识不同了,我们又进一步往深得层次学习了,感觉越来越有意思了,虽然临近结束了看着大家积极性越来越低了,但是我知道我不能这样,我要比别人付出的更多,更加的踏实才行,因为我知道我的基础不如别人,目标和动力也和他们不同,看着大家有的说是只要找到工作就好,还有的说只要每个月够花就好,担着真的是大家来这里学习的最终目的吗,如果是这样,真的还不如随便找个工作将就一下,也比这个整天做到这好多了,还交了那么贵得费用,所以何必呢,既然选择了这条路,既然当初抱着那么的憧憬,那么大的希望来到这里,走上这条路,那么我们就要坚定不移的走下去,美好的明天只有自己可以创造,也只有自己能够为自己负责,世界上没有卖后悔药,如果等到结局已经落定再去后悔,哪还有什么用,所以在这里望毅然选择程序道路的朋友们(不管是iOS,.Net,JAVA....)还是什么,都不要轻言放弃,要学会对自己负责,对关心在乎你的人负责,现在我想对自己和关心我的人说:加油加油!!!!!!

       今天就来为大家讲解下我们今天所学习的知识点,以及我自学的部分知识,希望可以和大家共同进步,共同努力,下面就来附上代码供大家参考,学习提意见等:

       一、函数的学习

      1.函数结构

       在Swift语言中,函数的基本结构是这样的,具体结构如下:

       函数

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

                              执行的代码块

             } 

       2.函数的基本示例

    func sayHello(name: String) -> (String) {
        return "Hello" + name
    }
    
    func sayByeBye(name:String, name1: String) -> (String) {
        return "WoJiao " + name + name1
    }

       以上函数名为sayHello (name:String, name1:String)对应的是参数列表, (String)指的是函数的返回值类型,大括号内部的便是函数要执行的代码块了,相信大家看到后会对函数有个最最初步的了解了吧,下面再为大家附上今天所作的小小练习了

    var letter = "aeibcd1234"
    func getNumbers (letter: String) -> (Int, Int, Int) {
    var count : Int = 0
    var count1 : Int = 0
    var count2 : Int = 0
    for oneChar in letter {
    //    var str = String(oneChar).lowercaseString
        switch oneChar {
            case "a", "i", "b":
                count++;
            case "e", "c", "d":
                count1++;
            default:
                count2++;
        }
    }
        return (count, count1, count2)
    }
    getNumbers(letter)      

       首先需要定义字符串,(很明显这些都和OC及UI中的不同)var letter = "aeibcd1234", 接下来定义三个整形的数用来计数,相信下面的switch,case大家都可以看懂的吧,这就是简单地分支结构了,我通过这个来判断内部有多少个'a','i','b'和'e','c','d'以及多少个数字了通过每进一次count(count1,count2)自加来表示,同时,在说明下,我注释掉的那一句是用来进行大小写转换的,如果所定义的字符串内部有字符串的话我们可以通过这个方法让其变为小写,以便我们后面对其进行计数处理,好了这个简单地函数就到这里了,如果有哪里不对了或者哪里不懂了都可以提出来哦,嘿嘿。

       3.外部参数的使用

       有些时候我们需要引入一个外部参数来实现我们的需求,但是需要注意的是,尽管有时间使用外部参数会使我们所编写的程序看起来很炫,但是外部参数是不可以在函数内部进行使用的,就比如我们要平常所写的就是类似下面的做法,如图所示:

    但是有时间你会发现我们在手机中碰到的或者所见源码中会有和上面不一样的实例,就比如:

       接下来下伙伴门肯定会有疑问吧(知道的要低调哈)那么我就来慢慢为大家解释下把,其实实现起来并不是太难,只需要一行代码就可以搞定了,总共方案有三种吧,下面就一一为大家附上代码供大家参考吧!

          现附上源码作为对比

    func personInfou( personName: String, sex: String,  age:String) -> String {
        return personName + " " + sex + age
    }

       方案一:

    func personInfou(name personName: String, sex sex: String, age age:String) -> String {
        return personName + " " + sex + age
    }

     就是在每个参数前加上一个外部参数名,想必大家经过对比都可以看出来的。

       方案二:

    func personInfou(#personName: String, #sex: String, #age:String) -> String {
        return personName + " " + sex + age
    }

       方案三:

    func personInfou(name personName: String, #sex: String, age:String = "25") -> String {
        return personName + " " + sex + age
    }

    以上就是实现的三种方法,是不是很神奇呢,说实在的,以前我也不知道可以这样写,不过现在算是知道了,可以说是get了一个新技能。

       4.函数的嵌套

       不过说真的,函数的嵌套和C语言的函数回调十分相似,不过由于在Swift中不存在.h文件和.m文件之分,所以为了保证文件源码的安全性,开发者做出了一下的调整,那就是将嵌套的函数体写在同一个函数内部,也可以说是充当了代码块来实现的,下面就为大家展示下Swift中的函数嵌套:

    //函数类型作为返回值
    // 隐藏 不希望别人看到
    func changeValue (isOne: Bool) -> Int -> Int {
        func plusOne(number: Int) -> Int {
            return number + 1;
        }
        func plusTwo(number: Int) -> Int {
            return number - 1;
        }
        return isOne ? plusOne : plusTwo
    }
    var cc : Int -> Int = changeValue(true)
    cc(20)

       在以上代码中,参数列表为(isOne:Bool)他是一个Bool类型的,通过下面的return isOne ? plusOne : plusTwo来进行函数的回调,如果传参为真,则开始回调一地个函数,反之回调第二个, 在下面最后一行进行函数的调用,var cc : Int -> Int = changeValue(true)传入一个true时通过return返回一个函数体,即为plusOne然后在对函数cc加以调用,传入参数20,来执行函数,这便是函数的简单嵌套,至于复杂的本博客将不断更新,敬请期待。

       二、Swift中闭包的简单学习

        1.闭包的简单结构

       {

               (参数列表)->返回值 in

          闭包的实现

       }

       其实Swift中闭包跟OC中的block类似,下面就为大家附上闭包的简单应用,不要错过哦,逐层加深哦,嘿嘿。

      (1)第一种实现方式    

    var names = ["Qiaoming", "kan", "taobao"]
    var sortedNames1: () = sort(&names, {
        (stringA: String, stringB: String) ->Bool in
        return stringA < stringB
    })
    
    names

        第一种其实没有什么好说的,只是套用结构而已,不过下面博友门就要看清楚了,是紧密联系的,一一演变而来的。

        (2)第二种实现方式   

    var sortedNames2:() = sort(&names, {
        (stringA, stringB) -> Bool in
        return stringA < stringB
    })
    names

    在这里去掉类型让系统去自行推断出stringA,stringB的类型,相比上一种是不是感动有少许的简单快捷呢,不过不要大意哈,下面的终极版马上就要来了。

         (3)第三种实现方式   

    var sortedName3: () =  sort(&names,{
        return $0 > $1
    })

    是不是看上去更简单了,这里用$0来表示第一个参数 $1来表示第二个参数。

       (4)第四种实现方式

    var sortedName4:() = sort(&names, >)
    names

    这便是第四种的实现方式,慢慢的看着似乎脱离了block,但是只用一句话就可以实现我们前面的需求了(就是对一个数组进行排序),需要说明的是这些都是又限制的,在Swift语言中,由于数组中存放的必须是同一种数据类型,所以参数类型可以省略不写,还有每个方法中的names只是为了用来验证是不是满足我们的需求,其实可以完全不用写的,当然是在我们写的比较多的时候。

        三、类 跟 结构体

        1.相同点

        (1)都可以定义属性 (2)都可以定义方法 (3)他们都可以定义便利构造器(初始化方法) (4)都可以遵循协议 (5)都可以被扩展

        2.不同点

         (1)类 可以被继承, 而结构体就不能 (2)类 可以被类型推断  (3)类 可以通过析构(即dealloc)释放内存  (4)类 它是引用类型 结构体是值类型

        以上就是我们今天所学习的只是点了,虽然不多,但是确实是新知识,感觉也挺有用的,毕竟是刚出来的,总有一天会派上用处的,所以还是要争取把它学好。下面的是附赠品哦(自己通过课余时间来学习了用Swift如何创建简单控件),下面就为大家附上代码,供大家参考研究:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
            self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
            // Override point for customization after application launch.
            self.window!.backgroundColor = UIColor.whiteColor()
            self.window!.makeKeyAndVisible()
            //lebel的创建
            let textLabel = UILabel(frame: CGRectMake(self.window!.frame.size.width / 2 - 150, 200, 300, 100))
            textLabel.text = ""
            textLabel.backgroundColor = UIColor(red:0.5,green:0.5,blue:0.5,alpha:1.0)
            textLabel.textColor = UIColor(red:0.5,green:0.2,blue:0.6,alpha:1.0)
            textLabel.textAlignment = NSTextAlignment.Center
            self.window!.addSubview(textLabel)
            
            //UIImageView的创建及添加图片
            let imageView = UIImageView(frame: CGRectMake(self.window!.frame.size.width / 2 - 150, 50, 300, 100))
            imageView.backgroundColor = UIColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 1.0)
            
            let image = UIImage(named: "1.png")
            imageView.image = image
            self.window!.addSubview(imageView)
            
            return true

        相信大家通过看这些肯定会看出来和UI中的创建方法完全不同,并且会感觉到不太上手,不过确实是这样的,当我这样写的时候自己都感觉不太对,也有点不可思议,竟然是这样写的,不过最终还是出来了,感到非常高兴,希望这些可以帮到大家,如果对简单控件的创建还有什么疑问的话,欢迎前来与我商讨,顺便说下,这个是在空模板中写的,语言不再试以前选择的OC了,而要改写为Swift了,哈哈。

         好了,今天就先写到这里了,感觉虽然东西不是很多,但还是需要慢慢消化的,毕竟是刚接触的,最后还是要重复我刚开始说的话,选择了这条路的亲朋好友们,还有你你你, 我们共同努力,一起揭开属于我们美好的明天,坚持就是胜利,更何况几个月已经走过来了,剩下的难道我们还会怕吗,加油加油喽,come on! 

  • 相关阅读:
    NVMe固态硬盘工具箱使用说明
    (原创)Python文件与文件系统系列(1)—— file 对象
    Linux系统排查4——网络篇
    Python内置类型——list
    (原)数据结构——线索二叉树
    Python匿名函数——lambda表达式
    Python生成器
    Python内置类型——dict
    Python内置类型——set
    解决Django-1.8.2应用部署到Apache后无法显示admin应用的CSS
  • 原文地址:https://www.cnblogs.com/dyx-wx/p/4271001.html
Copyright © 2011-2022 走看看