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 =
var count1 : Int =
var count2 : Int =
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 = "") -> 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 + ;
}
func plusTwo(number: Int) -> Int {
return number - ;
}
return isOne ? plusOne : plusTwo
}
var cc : Int -> Int = changeValue(true)
cc()
在以上代码中,参数列表为(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来表示第二个参数。
(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 / - , , , ))
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 / - , , , ))
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!
Swift学习之函数和简单地控件的创建的更多相关文章
- Swift 学习笔记 (函数)
函数 函数是一个独立的代码块,用来执行特定的任务.Swift中的函数与Object-C中的函数一样,但是声明与书写的方式不太一样,现在我们就通过几个例子介绍一下Swift中的函数.简单的来说,他与JS ...
- Ext入门学习系列(五)表格控件(1)
上节学习了Ext面板控件,为后面的各个控件学习奠定基础,在此基础上本章将学习网络开发最期待的功能——表格控件. 我们都知道网络编程语言中,除了.net其他的基本没有提供网格控件,而最近的asp.net ...
- Win32编程点滴3 - 简单ActiveX控件的使用
虽然这里一片的.net气氛,到处充斥着像MVC.WPF.WorkFlow.LINQ等各种niubility的术语.但我们使用的Windows还是由COM技术主宰着:我们在选择日常使用的软件时,也会避免 ...
- C# 学习笔记 三层架构系列(控件一)
下面是我两周的学习总结:这是我写给自己的,如果哪位朋友有幸看到这篇文章就是缘分.如果所说的内容不对,就请纠正.勿喷!!! 想要将两周的学习知识通过文字.通过代码.通过图片储备起来,以防自己那天思维短路 ...
- ASP.NET自定义控件组件开发 第一章 第一章:从一个简单的控件谈起
第一章:从一个简单的控件谈起 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ASP.NET自定义控件组件开发 第一章 第三 ...
- Flutter学习指南:UI布局和控件
Flutter学习指南:UI布局和控件 - IT程序猿 https://www.itcodemonkey.com/article/11041.html
- Spring Boot 项目学习 (二) MySql + MyBatis 注解 + 分页控件 配置
0 引言 本文主要在Spring Boot 基础项目的基础上,添加 Mysql .MyBatis(注解方式)与 分页控件 的配置,用于协助完成数据库操作. 1 创建数据表 这个过程就暂时省略了. 2 ...
- UWP入门(八)--几个简单的控件
原文:UWP入门(八)--几个简单的控件 每天看几个,要不聊几天我就可以看完啦,加油! 看效果 1. CheckBox <TextBlock Grid.Row="0" Tex ...
- Jetpack Compose学习(9)——Compose中的列表控件(LazyRow和LazyColumn)
原文:Jetpack Compose学习(9)--Compose中的列表控件(LazyRow和LazyColumn) - Stars-One的杂货小窝 经过前面的学习,大致上已掌握了compose的基 ...
随机推荐
- Ubuntu 10.04下安装Qt
sudo apt-get install qt4-dev-tools qt4-doc qt4-qtconfig qt4-demos qt4-designer qt-creator 其中: qt4-de ...
- edittext实现粘贴表情
package com.sixin.view; import com.sixin.utile.FaceDataUtil; import android.annotation.SuppressLint; ...
- 【转】Xcode升到6.4插件失效,与添加插件不小心点击Skip Bundle解决办法
转载自:http://www.jianshu.com/p/d51547d29309 今天升级了xcode到6.4 发现之前装的插件不能使用了.这里有一个解决的方案: 步骤如下: 一.查看Xcode的U ...
- DIV+CSS 自适应布局
两栏布局,左边定宽200px,右边自适应.如何实现?我的第一个反应就是:用flex伸缩盒呀,然后balabala...说完之后,面试官说,还有没有别的方法?flex有些浏览器不支持嗯...我愣了一下, ...
- .net 网站发布 Web.Config中的<compilation debug="true"/>
Web.Config中的<compilation debug="true"/> <compilation debug="true"/> ...
- Android原生Calendar代码阅读(一)
原生Calendar代码: 5.0Calendar源码.rar 提取的JavaDoc: Calendar的javadoc.rar 1. AsyncQueryService和AsyncQueryServ ...
- K-D Tree题目泛做(CXJ第二轮)
题目1: BZOJ 2716 题目大意:给出N个二维平面上的点,M个操作,分为插入一个新点和询问到一个点最近点的Manhatan距离是多少. 算法讨论: K-D Tree 裸题,有插入操作. #inc ...
- js判断上传文件的类型和大小
//检测文件大小和类型 function fileChange(target){ //检测上传文件的类型 if(!(/(?:jpg|gif|png|jpeg)$/i.test(target.value ...
- FTP两种工作模式:主动模式(Active FTP)和被动模式(Passive FTP)
在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令.服务器接收到命令后,会用其本地的FTP数据端口 ...
- 深入理解 静态类和静态字段(C# 基础)
序言 以前,总是被提醒,在编程过程中尽量少用静态变量,数据丢失什么的,今天有空,禁不住对静态变量的强烈好奇,跟我一起了解下静态家族的内幕吧. 静态类 定义 静态类与非静态类的重要区别在于静态类不能实例 ...