swift-计算器(斯坦福公开课)
看了斯坦福老头的课,真心觉得,我的中文怎么也变的这么垃圾了。是关于iOS8的课程,用swift写的,一个计算器应用的制作,看看人家的课,再看看咱们学校的课(不过垃圾学校,纯粹觉得大学浪费了),废话啊,废话,继续废话。那个老头的代码有些我给省略了,不知道会出现什么问题,反正我是没有发现,如果你发现了,请告诉我。还有就是这个计算器的具体操作步骤是,你先4-> 回车-> 5-> 回车 ->乘号 显示计算结果20
首先是界面的搭建,就是0-9一共10个按钮,然后加减乘除四个操作按键,以及,一个回车键(用来将所输入的数存放在栈中,反正老头是这样说的,他把输入进去的数存放到了一个数组中了var operandStack = Array<Double>(),还有就是一个用来显示输入的数以及输入结果的label了。这些都是在故事板中进行的(当然除了那个数组),然后将label与代码关联
@IBOutlet weak var resultLabel: UILabel!
//事实上,在这里指明类型被认为是不好的书写方式,如果可以推断出类型 ,你就应该让编译器自己去推断
//var isStart :Bool = false
var isStart = false //用户是不是已经输入,那个老外用了一长串的字符userIsInTheMiddleOfTypingANumber
将0-9这10个数的点击事件与代码关联
@IBAction func buttonTap(sender: UIButton) {
let digit = sender.titleLabel?.text// 注意这个digit是一个可选值(opentional),就是你点击的按钮上的数字,
if isStart{
resultLabel.text = resultLabel.text! + digit! //可选值是不可以拼接字符串的,所以在这个地方,需要进行解包
}else{
resultLabel.text = digit//用户第一次点(我这样理解的),结果框显示你按的那个数
isStart = true//这个是说用户已经开始输入了
}
}
var operandStack = Array<Double>()
//这个变量是一个内部的栈,去存储你输入的这些数,他的类型是一个数组,这个数组里存放的是Double的变量,注意在这个地方要初始化,(我们不能使用没有经过初始化的,会报错)
@IBAction func enter() {
isStart = false //因为我们在点完enter的时候,需要将刚才输入的数放到栈里,并且输第二个数,所以需要将这个布尔值设为false
// var value = (resultLabel.text! as NSString).doubleValue
operandStack.append(resultValue)
println("operandStack: \(operandStack)")
}
//计算型属性
var resultValue:Double{
get{
return NSNumberFormatter().numberFromString(resultLabel.text!)!.doubleValue
}
set{
resultLabel.text = "\(newValue)" //newValue是系统的,就是想要设置的那个值 2将double类型转换为字符串
// isStart = false// 这句话写在这不知道是什么意思,该怎么理解呢
}
}
@IBAction func operate(sender: UIButton) {
let operation = sender.currentTitle!
switch operation{
// case "✖️" : performOperation { $1 * $2 }
case "✖️": performOperation { $0 * $1} //这个地方,这地方真心坑,$0 * $1,我还以为传进入随便两个数就行了呢,那老头对这段代码不断的简化简化,才写成了这样,明天把简化的过程单独整理出来(明日复明日啊)
case "➗" : performOperation { $1 / $0 }
case "➖" : performOperation { $1 - $0 }
case "➕" : performOperation { $1 + $0 }
default:break
}
}
func performOperation(operation:(Double,Double)->Double){//函数的参数是一个函数
if operandStack.count >= 2{
resultValue = operation(operandStack.removeLast() , operandStack.removeLast())//operandStack.removeLast()难道说,这个方法删除并返回了最后一个数?
}
}
// func multipy(op1:Double,op2:Double)->Double{
//
// return op1 * op2
// }
swift-计算器(斯坦福公开课)的更多相关文章
- Swift项目开发实战-基于分层架构的多版本iPhone计算器-直播公开课
Swift项目开发实战-基于分层架构的多版本iPhone计算器-直播公开课 本课程采用Q Q群直播方式进行直播,价值99元视频课程免费直播.完整的基于Swift项目实战,手把手教你做一个Swift版i ...
- 斯坦福公开课:Developing IOS 8 App with Swift(1-3)心得体会
最近开始学习Swift开发移动程序.跟随斯坦福大学的公开课进行自学. 这真是一个美好的时代,虽然不能在斯坦福求学,但是可以观看录制的授课录像.讲义,好似老师在给我们上课一样! 心得: 1.每节课信息量 ...
- 关于ios8斯坦福公开课第二课
在这个课程中,我们遇到了这样的代码 @IBAction func oprate(sender: UIButton) { let opration = sender.currentTitle! if u ...
- 斯坦福公开课:Statistical Learning中做错的选择题
4.4 R1 In which of the following problems is Case/Control Sampling LEAST likely to make a positive i ...
- iOS菜鸟成长笔记(3)——斯坦福公开课学习(1)
一.iOS四层结构 1.Core OS 是用FreeBSD和Mach所改写的Darwin, 是开源.符合POSIX标准的一个Unix核心.这一层包含或者说是提供了整个iPhone OS的一些基础功能, ...
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记1 IOS8概述
首先感谢网易公开课和SwiftV课堂的朋友们辛苦翻译,这个系列是我学习斯坦福IOS8公开课的个人心得体会和笔记,希望能给大家带来启发. 首先我们要知道IOS系统中的结构情况,从贴近硬件的底层到贴近用户 ...
- 斯坦福大学 iOS 开发公开课总结
斯坦福大学 iOS 开发公开课总结 前言 iPhone 开发相关的教程中最有名的,当数斯坦福大学发布的 "iPhone 开发公开课 " 了.此公开课在以前叫做<iPho ...
- 斯坦福大学Andrew Ng教授主讲的《机器学习》公开课观后感[转]
近日,在网易公开课视频网站上看完了<机器学习>课程视频,现做个学后感,也叫观后感吧. 学习时间 从2013年7月26日星期五开始,在网易公开课视频网站上,观看由斯坦福大学Andrew Ng ...
- 智捷公开课马上开始了-欢迎大家一起讨论学习-第一系列读《Swift开发指南(修订版) 》看Swift视频教程
引用: 智捷课堂携手51CTO学院.图灵教育联合举办iOS线上培训就业班系列体验公开课. 分享移动开发.移动设计方向最新,最热,最抢眼技术热点以及设计经验.我们每周将最少举办一次公开课,同时会提前安排 ...
随机推荐
- C++学习笔记(三):数组
数组声明时必须指定该数组的长度: ]; 这个时候已经分配了内存,但没有初始化,所以具体的值是不确定的: 初始化: ] = {, , }; ] = {};//指定第一个数字为1,后面的使用0填充: ] ...
- 【C++深入浅出】设计模式学习之单例模式
但凡成为大家公认的模式,都是有一些不可小觑的威力,今天分享一个简单的设计模式:单例模式. 单例模式用于一些只希望有一个实例的类或者只希望执行一次的操作:校长只能有一个.老板只能有一个.用户点击弹窗只希 ...
- 利用putty软件连接虚拟机中linux操作系统
http://jingyan.baidu.com/article/9c69d48fbefe6613c8024e6a.html 大家在使用虚拟的过程中有时候会感觉切换操作系统很不方便,那么有什么方法可以 ...
- c# label的内容显示不全
c# label的内容显示不全.须要设置例如以下属性就可以: 1.将Lable的font属性的字体改成宋体: 2.将AutoSize属性改成true: 然后内容就能够显示所有了.
- 八、套接字(Socket)
demo 一个连接由它的两个端点标识,这样的端点称为套接 套接字是支持TCP/IP协议的网络通信的基本操作单元. 可以将套接字看作不同主机间的进程进行双向通信的端点. 上图连接1的一对套接字为: (1 ...
- V9最新手机门户域名绑定教程。
如需要绑定域名为wap.domain.com,作下如操作: 一.把wap.domain.com域名绑定到你的这个网站主机上.二.在网站后台模块>手机门户域名里面填写“http://wap.dom ...
- 用java程序模拟网站的登录以及文件批量上传
import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; ...
- Google前工程经理王忻:如何准备软件工程师的面试
http://t.jobdu.com/thread-368-1-1.html 导读:原文作者王忻,Google前工程经理,2003年月加入Google,是Google Lively背后的主导力量,是G ...
- oracle数据库管理员简介、导入数据与导出数据
数据库管理员: sys和system的权限区别:sys:所有oracle的数据字典的基表和视图都存放在sys用户中,这些基表和视图对于oracle的运行时至关重要的,由数据库 自己维护,任何用户都不能 ...
- c/c++将整数转换为字符串
#include <iostream> using namespace std; int main(int argc, char **argv) { ; iint i,j; ],e[]; ...