Swift实战(一): 剪子包袱锤ios应用
来自十奶的大作业教学视频。
http://www.swiftv.cn/course/ic2tqzob
主要了解了MVC模型。
首先是View,通过设计mainstoryboard构建UI界面,主要靠拖动,用到了label和button。
接着是model,设计RPS(剪子包袱锤)结构体,见Rps.swift。
1 //
2 // Rps.swift
3 // rockios
4 //
5 // Created by can on 15/11/9.
6 // Copyright (c) 2015年 can. All rights reserved.
7 //
8
9 import Foundation
10
11
12 struct Rps{
13 private var stat:Stats!
14
15 enum Stats {
16 case Rock
17 case Scissor
18 case Paper
19 }
20
21 func getStats () -> Stats {
22 return stat
23 }
24
25 mutating func setStats (inputStat: Stats!) {
26 stat=inputStat
27 }
28
29 func randomRps () -> Stats{ //生成一个随机的手势
30 let randomNumer = arc4random_uniform(3)
31 var randomStat:Stats!
32 switch randomNumer{
33 case 0:
34 randomStat = .Rock
35 case 1:
36 randomStat = .Scissor
37 case 2:
38 randomStat = .Paper
39 default:
40 print("Error")
41 }
42 return randomStat
43 }
44
45 func compare (aRpsStat:Stats, anotherRpsStat:Stats) -> Int {
46 //返回三种状态,0为前者数,1为前者赢,2为平局
47 var result:Int!
48 switch aRpsStat {
49 case .Rock:
50 switch anotherRpsStat{
51 case .Rock:
52 result=2
53 case .Scissor:
54 result=1
55 case .Paper:
56 result=0
57 }
58
59 case .Scissor:
60 switch anotherRpsStat{
61 case .Rock:
62 result=0
63 case .Scissor:
64 result=2
65 case .Paper:
66 result=1
67 }
68
69 case .Paper:
70 switch anotherRpsStat{
71 case .Rock:
72 result=1
73 case .Scissor:
74 result=0
75 case .Paper:
76 result=2
77 }
78
79 }
80 return result
81 }
82
83 }
最后是control,即ViewControl.swift,要和mainstoryboard关联起来,靠outlet和action。
//
// ViewController.swift
// rockios
//
// Created by can on 15/11/9.
// Copyright (c) 2015年 can. All rights reserved.
// import UIKit class ViewController: UIViewController { var rps = Rps(); // outlet and action @IBOutlet weak var Rock: UIButton! @IBOutlet weak var Paper: UIButton! @IBOutlet weak var Scissor: UIButton! @IBOutlet weak var textUp: UITextField! @IBOutlet weak var textDown: UITextField! @IBAction func Rock(sender:AnyObject){
rps.setStats(.Rock)
judgement()
} @IBAction func Paper(sender:AnyObject){
rps.setStats(.Paper)
judgement()
} @IBAction func Scissor(sender:AnyObject){
rps.setStats(.Scissor)
judgement()
} @IBAction func again(sender:AnyObject){
resetAll()
} //全局初始化
func resetAll(){
textUp.text = ""
textDown.text = ""
rps.setStats(nil)
} //判断输赢
func judgement () {
let randomRps=rps.randomRps()
let currentStat=rps.getStats()
let result = rps.compare(currentStat, anotherRpsStat: randomRps)
screen(result,stat:currentStat,anotherStat:randomRps)
} //控制显示的方法
func screen(result:Int,stat:Rps.Stats,anotherStat:Rps.Stats){
var resultString=""
var statString=""
var anotherString="" switch result{
case 0:
resultString="输"
case 1:
resultString="赢"
case 2:
resultString="竟然平局"
default:
resultString="醉"
} switch stat{
case .Rock:
statString = "Swift实战(一): 剪子包袱锤ios应用的更多相关文章
- Swift实战-豆瓣电台(九)简单手势控制暂停播放(全文完)
Swift实战-豆瓣电台(九)简单手势控制暂停播放 全屏清晰观看地址:http://www.tudou.com/programs/view/tANnovvxR8U/ 这节我们主要讲UITapGestu ...
- Swift实战-豆瓣电台(八)播放进度与时间
视频观看地址:http://www.tudou.com/programs/view/4mEtz8S72k0/?resourceId=399000367_06_02_99 这节主要内容是NSTimer, ...
- Swift实战-豆瓣电台(七)显示动画
youku观看地址http://v.youku.com/v_show/id_XNzMxODQzNDIw.html 这是一个很酷的动画效果.特别是数据多的时候 知识点 在单元格(Cell)显示方法中设置 ...
- Swift实战-豆瓣电台(六)视图跳转,传参及回跳
youku观看地址:http://v.youku.com/v_show/id_XNzMxMzQ3MDcy.html 要点 在ChannelController里面声明一个代理 这个代理遵循我们自定义的 ...
- Swift实战-豆瓣电台(五)播放音乐
观看地址 http://v.youku.com/v_show/id_XNzMwODM0MzI0.html 在这节里面,我们简单学习了一下MediaPlayer的使用 引入媒体框架 import Med ...
- Swift实战-豆瓣电台(四)歌曲列表的展现
观看地址 http://v.youku.com/v_show/id_XNzMwNDE0OTA4.html 这节的主要内容是如何利用cell展现获取到的数据. 首先申明两个数组来储存我们获取到的数据 v ...
- Swift实战-豆瓣电台(三)获取网络数据
观看地址:http://v.youku.com/v_show/id_XNzMwMzQxMzky.html 这节内容,我们先说了怎么将storyboard中的组件在类中进行绑定.然后写了一个类用来获取网 ...
- Swift实战技巧
Swift实战技巧 从OC转战到Swift,差别还是蛮大的,本文记录了我再从OC转到Swift开发过程中遇到的一些问题,然后把我遇到的这些问题记录形成文章,大体上是一些Swift语言下面的一些技巧,希 ...
- Swift开发iOS项目实战视频教程(一)---iOS真简单
本课主要介绍iOS项目的创建.第一个iOS项目的开发.UILabel.UIButton的使用. 假设你看完此视频还认为iOS非常难,请你来找我! 本教程摒弃枯燥的语法和知识解说,全是有趣有料的项目实战 ...
随机推荐
- 【linux高级程序设计】(第八章)进程管理与程序开发 5
守候进程 启动方式: 在系统启动时由/etc/rd.d目录下的启动脚本启动 利用inetd超级服务器启动 有cron命令定时启动,以及在终端用nohup命令启动 守护进程编程要点 (1)屏蔽有关控制终 ...
- ASP.NET MVC验证所有属性是否合法
1.实现代码: /// <summary> /// 验证所有属性是否合法 /// </summary> /// <param name="modelState& ...
- slam学习足迹
1.slam入门介绍 2.齐次坐标系 3.贝叶斯滤波 均值:平均值 标准差:样本的集中程度/分散度 方差:标准差的平方 协方差:不同维度之间的关系(相关度) 协方差矩阵:多维度之间的关系(相关度) 4 ...
- scanf格式控制符之%[]的应用
考虑只读入小写字母的字符串,这个问题要如何用scanf解决呢? 这就用到了%[] 这个格式控制符,它支持a-z这样的格式控制 char s[111]; scanf("%[a-z]" ...
- log4j(一)
一.基础知识 Log4j有三个重要组件:Logger-日志信息的级别,appenders-日志信息的输出目的地,layouts-日志信息的输出格式. Logger-日志信息的级别:level 是日志记 ...
- 线程安全的单例模式还需要对成员变量的set get方法设置锁么
不需要,线程安全的单例模式,在获得对象时已经加锁了,保证每时每刻只有一个线程获得此单例对象.所以不需要再上锁了啊
- 关于Sending build context to Docker daemon 数据很大的问题
以往进行docker build的时候都是在新建的文件夹下面进行,这次为了图方便,就直接放在开发根目录下进行build,这样子问题就来了.于是就有了下面的文件大小发送量: Sending build ...
- Web.config配置文件详解(新手必看) 【转】
来源 :http://www.cnblogs.com/gaoweipeng/archive/2009/05/17/1458762.html 花了点时间整理了一下ASP.NET Web.config配置 ...
- Android - EditText 注意(缺少字符)
EditText 注意(缺少字符) 本文地址:http://blog.csdn.net/caroline_wendy EditText使用监听(Listener)addTextChangedListe ...
- Linux常用的几个vi小命令
输入跳转命令: 命令行前 Ctrl+A 命令行后 Ctrl+E VI命令中: 当前行 行首 "0" 当前行 行尾 "Shift+4" 当前文档首行首字符:& ...