首先来讲下闭包吧,其实闭包跟之前C中的block回调函数类似,但这里只研究了基础的使用,我在下面的两个VC中利用闭包做了通讯传值,也算是比较常用的方法吧,回头有时间我再研究下在项目中的其它应用
let sayHello = {
println("nihao")
}
sayHello()
//定义一个闭包函数,与常规方法不同的是后面有个关键字in哦
let add = { (a: Int, b: Int) -> Int in
return a + b
}
//调用的时候其实跟调用方法一样哦
println(add(1, 2))
//下面就是一个简单的例子,来找出数组中大于等于value的值,如果有,返回Yes
var array = [20, 9, 100, 34, 89, 39]
func hasClosureMatch(array: [Int], value: Int, closureValue: (num:Int, value:Int)-> Bool)-> Bool {
for item in array {
if (closureValue(num: item, value: value)) {
return true
}
}
return false
}
//Closure 闭包
var v1 = hasClosureMatch(array, 40) { (num, value) -> Bool in
return num >= value
}
println(v1)
然后是UI基础的代码,可以直接创建单一控制器的工程,主要是为了熟悉一下代码
这里我们可以先把storyboard关掉,直接改动appdelegate里面的方法
UI这里面就没有太多要讲的,主要是多查查相关的API,然后慢慢积累咯
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window!.backgroundColor = UIColor.whiteColor()
self.window!.makeKeyAndVisible()
//从语法上,我觉得跟O-C真的很不一样,但是道理是通的,如果你的O-C语言还算熟练,我想上手swift语言也是很轻松的
let rootViewController = RootViewController()
let navigationController = UINavigationController(rootViewController: rootViewController)
navigationController.tabBarItem = UITabBarItem(title: "第一页", p_w_picpath: nil, tag: 1)
let secondViewController = SecondViewController()
let secondNavigationController = UINavigationController(rootViewController: secondViewController)
secondNavigationController.tabBarItem = UITabBarItem(title: "第二页", p_w_picpath: nil, tag: 2)
let array = [navigationController, secondNavigationController];
let tabBarController = UITabBarController()
tabBarController.viewControllers = array
self.window!.rootViewController = tabBarController
return true
}
接下来我们创建两个VC的类,Swift里面并没有所谓的指定类创建,而是在swift文件里,我们可以创建好多好多的类,当然了,为了更好的区分,我就单独创建类吧
这样我们在两个类里面单独创建一些基础的控件,然后再写一个协议来运用起来
主要还算来熟悉一下相关的语法
在下面的代码中也用到了Protocol以及Closure,方便小伙伴们上手哦
class RootViewController: UIViewController, ViewChangeDelegate {
var clickCount:Int = 0;
var myLabel:UILabel?
override func viewDidLoad() {
super.viewDidLoad()
self.title = "炉石传说"
let nextItem = 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!)
var myButton = 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)
}
func clickMe(sender:UIButton) {
clickCount += 1;
println("click\(clickCount)")
myLabel!.text = "你猜我点了几次呢,\(clickCount)"
}
func nextPage(sender:UIButton) {
let secondViewController = SecondViewController()
secondViewController.viewChangeDelegate = self
secondViewController.changeTextForClosure("1", num: 1) { (value, num) -> Void in
myLabel?.text = value
}
self.navigationController?.pushViewController(secondViewController, animated: true)
}
func changeTitleToString(controller:UIViewController, value:String) {
myLabel!.text = value
}
import Foundation
import UIKit
class SecondViewController: UIViewController {
var viewChangeDelegate:ViewChangeDelegate?
var closure = { (value:String, num:Int) -> Void in
}
override func viewDidLoad() {
super.viewDidLoad()
self.title = "第二页"
self.view.backgroundColor = UIColor.grayColor()
var button = UIButton.buttonWithType(.System) as! UIButton
button.frame = CGRect(x: 100, y: 100, width: 100, height: 40)
button.setTitle("返回上一页", forState: .Normal)
button.addTarget(self, action: "back:", forControlEvents: .TouchUpInside)
self.view.addSubview(button)
var buttonChange = UIButton.buttonWithType(.System) as! UIButton
buttonChange.frame = CGRect(x: 100, y: 200, width: 100, height: 40)
buttonChange.setTitle("改变首页label值", forState: .Normal)
buttonChange.addTarget(self, action: "change:", forControlEvents: .TouchUpInside)
self.view.addSubview(buttonChange)
}
func changeTextForClosure(value:String, num:Int, closureValue:(value:String, num:Int) -> Void) {
self.closure = closureValue
}
func change(sender:UIButton) {
if ((viewChangeDelegate) != nil) {
viewChangeDelegate?.changeTitleToString(self, value: "我变变变")
}
self.closure("你好", 1)
}
func back(sender:UIButton) {
self.navigationController?.popToRootViewControllerAnimated(true)
}
}
protocol ViewChangeDelegate : NSObjectProtocol {
func changeTitleToString(controller:UIViewController, value:String)
}
好啦,就先写这么多吧
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。