Swift开发笔记1.《Swift开发指南》计算器实战项目的相关心得

简介:         本人是个IOS开发新手,之前没有接触过Objective-C语言,直接从最新的Swift学起,进行IOS8的学习开发。

        本人是个IOS开发新手,之前没有接触过Objective-C语言,直接从最新的Swift学起,进行IOS8的学习开发。由于Swift语言是一门全新的语言,网上的资料很少,遇到问题百度搜到的都是英文的页面。通过一段时间的学习,我基本掌握了Swift的语法,坚持使用Swift进行IOS8的开发对我们提升自己的Swift编程能力很有帮助。相信很多人学习Swift语言都选择了《Swift开发指南》这本书,我觉得这本书写的不错,但是在自己动手演练本书21章的计算器项目时,遇到了一些问题,书中并没有给予纠正,网上下载的示例代码中也没有改正。下面说说我在手敲这个项目时的心得体会,希望能给其他Swift爱好者带来帮助。

        我使用的是APP store中下载的最新版的Xcode6.1.1.一般的项目都是由底层向顶层开发,按照书中的步骤,业务逻辑层中的类CalcLogic中应用了之前定义的一个枚举类型,但是实例名使用了Operator(书中是大写的,网上代码里小写,都会报错,因为operator是系统关键字,所以我把实例名换成了operator1),代码如下:

<pre name="code" class="cpp">class CalcLogic{
    //保存上一次的值
    var lastRetainValue:Double
    //最近一次选择的操作符
    var operator1:Operator
    //临时保存MainLabel内容,为true时,输入数字MainLabel内容被清0
    var isMainLabelTextTemporary:Bool
...
}


        
 之后在定义方法calculateByTag 时我遇到了一个让我哭笑不得的错误,calculateByTag中有一个switch开关语句,其中在case .Divide中有一个if else判断语句,我按照之前的编程习惯,把else单独放在一行,后来一直报错,直到我查阅了书籍,发现书中的else和前后大括号的写法都是“ } else { ”,改成这样的形式后错误消失了,在赋值语句中同样会遇到报错,一个=前后都应该有空格,所以奉劝大家在做Swift开发的时候一定要养成敲空格的好习惯T T。代码段如下 
 

func calculateByTag(tag:Int,withMainLabelString mainLabelString:String)->String{
    var currentValue = (mainLabelString as NSString).doubleValue
        switch operator1{
        case .Plus:
            lastRetainValue += currentValue
        case .Minus:
            lastRetainValue -= currentValue
        case .Multiply:
            lastRetainValue *= currentValue
        case .Divide:
            if currentValue != 0 {
                lastRetainValue /= currentValue
            } else {
            operator1 = .Default
                isMainLabelTextTemporary = true
                return "错误"
            }
        default: lastRetainValue = currentValue
        }

      另外一点要注意,switch中的默认关键字是小写的“default”,书中写成了大写的,这是错误的,不要跟case中的.Default搞混,这个大写开头的Default是我们之前在Operator枚举类型中自己定义的。书中代码引用的变量都没有加强制拆封,也就是“!”,但是在实际编程中Xcode会提示你加上“!”。

       同样是这个方法中,Operator的静态方法fromRaw在Xcode中提示已经被取代了!Xcode帮我改成了如下格式:

operator1 = Operator(rawValue: tag)!

      表示层开发中没有遇到很大的难点,有以下几点需要注意的:首先,在给tag赋值的时候我没找到“tag”,后来发现是属性监测器工具栏太长了屏幕没有显示完全,往下拖一点就找到了(原谅我是个新手),其次,书中的Xcode应该不是最新版本,因为在Xcode6.1.1中的“辅助编辑器”图标已经变了,大家注意一下,现在的图标是两个圆圈的样子,如图所示:




        最后完成图如下:




遗憾的是,我完成的计算器的小数点按键在点击时会报错,目前还没找到原因,不知道大家的作品是怎么样的呢?



目录
相关文章
|
5天前
|
数据可视化 数据处理 Swift
Swift开发——简单App设计
SwiftUI教程概述:简化App设计,通过代码展示了如何创建一个计算两个数之和的界面。工程`MyCh0902`包含`ContentView.swift`,其中定义了`ContentView`和`MyView`结构体。`MyView`负责界面布局,使用`VStack`和`HStack`组织元素,如`TextField`和`Button`。点击`Button`调用`calc`方法处理输入并更新结果。界面设计可在Xcode的Inspector窗口中可视化配置。推荐将界面逻辑移到单独的`MyView.swift`文件中以清晰分离视图设计。
18 1
Swift开发——简单App设计
|
12天前
|
存储 Swift 索引
Swift开发——索引器扩展
扩展用于向已存在的类型(例如,类、结构体、枚举和协议等)中添加新的功能,扩展甚至可以向系统类型(包括无法查阅代码的类型)中添加新的功能,但是扩展不能覆盖原类型中已有的方法,扩展也不能向类中添加新的存储属性。
32 6
Swift开发——索引器扩展
|
13天前
|
存储 Swift
Swift开发——属性检查器
Swift中的属性检查器(willSet, didSet)允许在设置存储属性值前后执行代码。在类`Circle`中,属性`radius`使用属性观察器:willSet在赋值前检查值,若值为负则打印警告;didSet在赋值后比较新旧值,根据变化输出相应信息。在实例`c`中,`radius`从-5变为0时,输出“Input value is negative.”和“The circle gets smaller.”;从0变为10时,输出“Input value is normal.”和“The circle gets larger.”。
14 4
Swift开发——属性检查器
|
14天前
|
Swift C++ 索引
Swift开发——简单函数实例
函数是编程的基础,用于封装特定功能的代码。它们有关键词func、函数名、参数列表(可为空)和返回类型。多返回值可通过元组、数组、inout参数或可选类型实现。例如,返回元组 `(value1, value2)`,数组 `[value1, value2]` 或使用可选数组 `[[Double]]?`。函数可以作为其他函数的参数,类似闭包或Lambda表达式。在Swift中,示例展示了通过元组、带索引的元组、数组和可选类型返回多个值的函数。还演示了如何使用inout参数交换变量值。
25 5
Swift开发——简单函数实例
|
11天前
|
存储 Swift
Swift开发——弱占用
Swift的自动引用计数(ARC)管理类实例内存,通过强引用保持实例存活。当出现强引用循环时,可使用`weak`关键字创建弱引用,避免阻止实例释放。弱引用在不再被强引用时导致对象立即释放。示例中,添加`weak`至`author`和`book`变量防止引用循环,使得两者析构器均执行,释放内存。图2展示了弱引用结构,当解除所有强引用后,ARC自动释放实例,调用析构器。
16 1
Swift开发——弱占用
|
2月前
|
人工智能 物联网 API
LLM 大模型学习必知必会系列(十三):基于SWIFT的VLLM推理加速与部署实战
LLM 大模型学习必知必会系列(十三):基于SWIFT的VLLM推理加速与部署实战
LLM 大模型学习必知必会系列(十三):基于SWIFT的VLLM推理加速与部署实战
|
13天前
|
存储 程序员 Swift
Swift开发——存储属性与计算属性
Swift推荐使用结构体进行开发,结构体支持属性和方法,且作为值类型。结构体属性包括存储属性(如radius)和计算属性(如r),计算属性不存储值,类似方法。结构体用`struct`定义,命名遵循大驼峰规则。实例名遵循小驼峰规则。属性可在结构体中任意位置定义,静态属性用`static`。存储属性可为`lazy`实现懒加载。结构体实例通过`.`访问属性和方法,静态属性和方法用`结构体名.`访问。计算属性可读写,可通过`get`和`set`定义。程序段1展示了结构体Point和Circle的属性和方法,包括私有属性、只读计算属性、可读写计算属性及`mutating`方法。
10 0
Swift开发——存储属性与计算属性
|
15天前
|
存储 算法 Swift
Swift开发——循环执行方式
Swift语言中的循环主要包括`for-in`和`while`结构。`for-in`适用于遍历数字区间、字符串和字典,支持使用`stride`函数定制步进。字典遍历时,可以用二元元组`(k, v)`访问键值对。`while`循环有标准形式和`repeat-while`形式,确保至少执行一次循环体。程序示例展示了`for-in`和不同`while`结构的用法,包括计算阶乘、奇数和、加密字符串以及最大公约数和最小公倍数。
14 0
Swift开发——循环执行方式
|
16天前
|
Swift 索引
Swift开发——元组
Swift中的元组是一种数据结构,用于组合不同类型的值。它们不是独立的数据类型,而是以有序序列形式存在,用圆括号括起,元素间用逗号分隔。元组可以有任意数量和类型的元素,可变性取决于其定义。常用于函数返回多个值。示例代码展示了元组的创建、访问、解包及赋值。元组可以通过标签来标识元素,支持嵌套和比较。在函数返回值和并行赋值场景中,元组特别有用。
26 0
Swift开发——元组
|
16天前
|
安全 JavaScript Swift
Swift开发——输出格式化字符
这篇文章介绍了Swift语言的基本概念和格式化输出方法。Swift是苹果平台的官方编程语言,强调类型安全,使用`main.swift`作为程序入口。文章通过示例展示了如何使用`print`函数进行格式化字符串输出,包括控制整数和浮点数的宽度、对齐方式以及使用`String(format:)`函数。示例代码创建了一个名为Ch0001的工程,并展示了不同输出方式,如常规输出、格式化输出和使用`\(`常量名或变量名`)`的形式。最后,文章给出了程序的运行结果截图。
22 0
Swift开发——输出格式化字符