swift篇第四期:闭包、UI基础、Protocol

前端之家收集整理的这篇文章主要介绍了swift篇第四期:闭包、UI基础、Protocol前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


首先来讲下闭包吧,其实闭包跟之前C中的block回调函数类似,但这里只研究了基础的使用,我在下面的两个VC中利用闭包做了通讯传值,也算是比较常用的方法吧,回头有时间我再研究下在项目中的其它应用

letsayHello={
println("nihao")
}

sayHello()

//定义一个闭包函数,与常规方法不同的是后面有个关键字in哦
letadd={(a:Int,b:Int)->Intin
returna+b
}

//调用的时候其实跟调用方法一样哦
println(add(1,2))

//下面就是一个简单的例子,来找出数组中大于等于value的值,如果有,返回Yes
vararray=[20,9,100,34,89,39]

funchasClosureMatch(array:[Int],value:Int,closureValue:(num:Int,value:Int)->Bool)->Bool{
foriteminarray{
if(closureValue(num:item,value:value)){
returntrue
}
}
returnfalse
}

//Closure闭包
varv1=hasClosureMatch(array,40){(num,value)->Boolin
returnnum>=value
}


println(v1)


然后是UI基础的代码,可以直接创建单一控制器的工程,主要是为了熟悉一下代码

这里我们可以先把storyboard关掉,直接改动appdelegate里面的方法

UI这里面就没有太多要讲的,主要是多查查相关的API,然后慢慢积累咯

funcapplication(application:UIApplication,didFinishLaunchingWithOptionslaunchOptions:[NSObject:AnyObject]?)->Bool{
//Overridepointforcustomizationafterapplicationlaunch.
self.window=UIWindow(frame:UIScreen.mainScreen().bounds)
self.window!.backgroundColor=UIColor.whiteColor()
self.window!.makeKeyAndVisible()

//从语法上,我觉得跟O-C真的很不一样,但是道理是通的,如果你的O-C语言还算熟练,我想上手swift语言也是很轻松的
letrootViewController=RootViewController()
letnavigationController=UINavigationController(rootViewController:rootViewController)
navigationController.tabBarItem=UITabBarItem(title:"第一页",image:nil,tag:1)

letsecondViewController=SecondViewController()
letsecondNavigationController=UINavigationController(rootViewController:secondViewController)
secondNavigationController.tabBarItem=UITabBarItem(title:"第二页",tag:2)

letarray=[navigationController,secondNavigationController];
lettabBarController=UITabBarController()
tabBarController.viewControllers=array

self.window!.rootViewController=tabBarController

returntrue
}


接下来我们创建两个VC的类,Swift里面并没有所谓的指定类创建,而是在swift文件里,我们可以创建好多好多的类,当然了,为了更好的区分,我就单独创建类吧

这样我们在两个类里面单独创建一些基础的控件,然后再写一个协议来运用起来

主要还算来熟悉一下相关的语法

在下面的代码中也用到了Protocol以及Closure,方便小伙伴们上手哦

classRootViewController:UIViewController,ViewChangeDelegate{
varclickCount:Int=0;
varmyLabel:UILabel?

overridefuncviewDidLoad(){
super.viewDidLoad()

self.title="炉石传说"

letnextItem=UIBarButtonItem(title:"下一页",style:.Plain,target:self,action:"nextPage:")
self.navigationItem.rightBarButtonItem=nextItem

myLabel=UILabel(frame:CGRect(x:0,y:100,width:320,height:44))
myLabel!.text="小华,你好啊"
myLabel!.backgroundColor=UIColor.redColor()
self.view.addSubview(myLabel!)

varmyButton=UIButton(frame:CGRect(x:100,y:200,width:100,height:44))
myButton.backgroundColor=UIColor.blueColor()
myButton.setTitle("点击",forState:.Normal)
myButton.addTarget(self,action:"clickMe:",forControlEvents:.TouchUpInside)
self.view.addSubview(myButton)
}

funcclickMe(sender:UIButton){
clickCount+=1;
println("click\(clickCount)")
myLabel!.text="你猜我点了几次呢,\(clickCount)"
}

funcnextPage(sender:UIButton){
letsecondViewController=SecondViewController()
secondViewController.viewChangeDelegate=self
secondViewController.changeTextForClosure("1",num:1){(value,num)->Voidin
myLabel?.text=value
}
self.navigationController?.pushViewController(secondViewController,animated:true)
}

funcchangeTitleToString(controller:UIViewController,value:String){
myLabel!.text=value
}
importFoundation
importUIKit

classSecondViewController:UIViewController{
varviewChangeDelegate:ViewChangeDelegate?
varclosure={(value:String,num:Int)->Voidin

}

overridefuncviewDidLoad(){
super.viewDidLoad()

self.title="第二页"
self.view.backgroundColor=UIColor.grayColor()

varbutton=UIButton.buttonWithType(.System)as!UIButton
button.frame=CGRect(x:100,height:40)
button.setTitle("返回上一页",forState:.Normal)
button.addTarget(self,action:"back:",forControlEvents:.TouchUpInside)
self.view.addSubview(button)

varbuttonChange=UIButton.buttonWithType(.System)as!UIButton
buttonChange.frame=CGRect(x:100,height:40)
buttonChange.setTitle("改变首页label值",forState:.Normal)
buttonChange.addTarget(self,action:"change:",forControlEvents:.TouchUpInside)
self.view.addSubview(buttonChange)
}

funcchangeTextForClosure(value:String,num:Int,closureValue:(value:String,num:Int)->Void){
self.closure=closureValue
}

funcchange(sender:UIButton){
if((viewChangeDelegate)!=nil){
viewChangeDelegate?.changeTitleToString(self,value:"我变变变")
}
self.closure("你好",1)
}

funcback(sender:UIButton){
self.navigationController?.popToRootViewControllerAnimated(true)
}
}

protocolViewChangeDelegate:NSObjectProtocol{
funcchangeTitleToString(controller:UIViewController,value:String)
}



好啦,就先写这么多吧

原文链接:https://www.f2er.com/swift/326631.html

猜你在找的Swift相关文章