首先来讲下闭包吧,其实闭包跟之前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