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!

时间: 2024-10-12 16:52:36

Swift学习之函数和简单地控件的创建的相关文章

Swift 学习笔记 (函数)

函数 函数是一个独立的代码块,用来执行特定的任务.Swift中的函数与Object-C中的函数一样,但是声明与书写的方式不太一样,现在我们就通过几个例子介绍一下Swift中的函数.简单的来说,他与JS中的函数声明有些相像,但是如果有返回值的时候,他们返回值的书写方式又有不同. 先来说一个简单的例子 //greet 函数的名称 //personName:函数的形式参数,可以为多个 用逗号隔开 //->String 函数的返回值类型 如果没有可以不写 func greet(personName:St

ExtJS4.2学习(17)表单基本输入控件Ext.form.Field

Ext.form.Field是所有表单输入控件的基类,其他的输入控件都是基于Ext.form.Field扩展得来的. Ext.form.Field中定义了输入控件通用的属性和功能函数,这些通用的属性和功能函数大致分为3大类:页面显示样式.控件参数配置和数据有效性检验.我们先来看看表单输入控件可以使用的校验显示方式.默认情况下,这些输入控件会监听blur事件,如果数据校验失败,就会根据msgTarget中的设置显示错误信息.通常,msgTarget会被设置为qtip,即使用QuickTip显示错误

C# Winform学习---MDI窗体的设计,PictureBox控件(图片上一页下一页),Timer控件,MenuStrip控件

一.MDI窗体的设计 1.MDI简介 MDI(Multiple Document Interface)就是所谓的多文档界面,与此对应就有单文档界面 (SDI), 它是微软公司从Windows 2.0下的Microsoft Excel电子表格程序开始引入的,Excel电子表格用户有时需要同时操作多份表格,MDI正好为这种操作多表格提供了很大的方便,于是就产生了MDI程序 2.效果图: 如下图所示,多窗体嵌套,其中一个是父窗体,其条是子窗体. 横向排列下面的窗体: 纵向排列下面的窗体: 关闭全部子窗

Duilib 学习源码系列1-创建控件

好了,昨天研究出了为什么加载xml结束以后我在自己新建一个控件位置不能调整,原来要先add才能调属性. 本来这个是昨天的任务,虽然这块内容是前天就看完的,权当边写边复习吧. 上一篇提到 <VerticalLayout name="window" bkcolor="#FFFFFFFF" bkcolor2="#FFAAAAA0" bkcolor3="#00000000"> 代表了一个控件字符串; 上次忘记说了 及时经过

【WPF学习】第十九章 控件类

原文:[WPF学习]第十九章 控件类 WPF窗口充满了各种元素,但这些元素中只有一部分是控件.在WPF领域,控件通常被描述为与用户交互的元素--能接收焦点并接受键盘或鼠标输入的元素.明显的例子包括文本框和按钮.然而,这个区别有时有些模糊.将工具提示视为控件,因为它根据用户鼠标的移动显示或消失.将标签视为控件,因为它支持记忆码(mnemonics,将焦点转移到相关控件快捷键). 所有控件都继承自System.Windows.Control类,该类添加了一小部分基本的基础结构: 设置控件内容对齐方式

MyWidget【简单自制控件】

#coding=gbk from PyQt4 import QtGui,QtCore import random class MyWidget(QtGui.QWidget): def __init__(self,parent=None): if parent is None: self.app=QtGui.QApplication([]) super(MyWidget,self).__init__(parent) self.setToolTip('双击控件改变线条颜色'.decode('gbk'

Silverlight学习笔记(三):控件布局管理

简介: 学习Silverlight控件在页面上是如何进行布局,实现多种复杂布局 一.常见的三种布局方式 1. Silverlight学习笔记(三):控件布局管理,码迷,mamicode.com

第三章 按钮控件的创建

一.前言 不知不觉一晃两个月过去,说来惭愧,在此期间alterto一直没有再研究DuiEngine.主要是因为DuiEngine的作者现在构建一个新的界面库soui,而笔者也一直处于观望状态,因为DuiEngine的作者说了以后可能就不维护DuiEngine了,要把主要的经历放在SOUI上.alterto顿时犹豫了,既然这样我还为DuiEngine做什么教程啊.于是这两个月的时间里一直都很犹豫,也没有再出DuiEngine相关的教程.现在看来这种焦躁对于一个优秀的程序猿来说着实不应该,这也正暴露

win32 控件的创建和消息响应

1. 控件的创建 控件的创建和窗口创建是一样的,例如: //-------- 创建窗口或控件 ----hwnd = CreateWindow("button","myButton01", WS_VISIBLE|WS_CHILD, 80,60,35,25, hWnd,(HMENU)IDB_BUTTON01,hInst,NULL); 是一个按钮的创建,其中hWnd是窗口句柄,hInst是应用程序句柄. 其他控件类似的可以把第一个参数"button"改