热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Swift基本语法(变量常量,可选项,逻辑语句)

前言Swift已经到3.1版本,所以打算把Swift捡起来,写几篇Swift文章,从最基础介绍下Swift,如有错误,望指正.下面作者开始聊下Swift.一Swift与OC简单对比

前言

Swift已经到3.1版本, 所以打算把Swift捡起来, 写几篇Swift文章, 从最基础介绍下Swift, 如有错误, 望指正. 下面作者开始聊下 Swift.

一 Swift与OC简单对比

《Swift 基本语法(变量常量, 可选项, 逻辑语句)》 Swift 与 OC 基本差异介绍.png

二 变量与常量

func demo() -> () {

// 1. 定义变量 var => 定义后, 可以修改 / 常量 let => 定义后, 不能修改
var x = 10
x = 20
print(x) // 输出-- 20

let y = 9.5
print("Double类型 : ", y) // 输出-- Double类型 : 9.5

// 2. 自动推导. 变量/常量 的类型会根据右侧代码执行结果, 推导对应的类型
// 热键 : option + click(点击)
// let customView: [UIView]
let customView = UIView()
print(customView) // 3. 在Swift中对类型要求异常严格,
// *******任何不同类型的数据之间, 不允许直接运算 ; 不会做 隐式转换.******
// OC 中写法 (int)b => 类型强转.
// Swift 中 Int(b) => 结构体的构造函数.
let a = 3
let b = 8.5
// print(a + b) 不能直接进行运算
print(a + Int(b)) // 输出-- 11
print(Double(a) + b) // 输出-- 11.5

demo2()
}

// 无参无返回值简写 与标准写法 func demo() -> () 等价. Swift函数 以后详细说明
func demo2() {

// 如果需要指定变量/ 常量的类型, 也可以直接使用 let x: 类型 = 值
// Swift 开发中 很少使用这种方式, 通常都是自动推导
let a : Double = 3
let b = 8.5
print("指定类型 :", a + b) // 输出-- 指定类型 : 11.5

// 如果定义 UI类, 应该使用 let
let customView = UIView()
// 这里 仅仅修改 customeView 是属性, 并没有修改 customView的指针地址, 所以是常量
customView.backgroundColor = UIColor.red
}

三 可选项 Optional

**可选项概念 : **
定义变量时, 如果指定为 可选的, 表示该变量 可以有一个指定类型的值, 也可以是 nil.
定义变量是, 在类型后面添加一个 ‘?’, 表示该变量是可选的.
变量可选项 默认值为 nil.
常量可选项没有默认值.

定义 : Optional 可能有两个值 (none / some)

格式(1. 自动推导) : var 变量名: OptiOnal= 值

let x: OptiOnal= 10
格式(2. 使用泛型) : var 变量名: Optional<类型> = 值
let y: Optional = 20
格式(3. 简化格式) : var 变量名: 类型? = 值
let z: Int? = 30

可选值参与计算前, 必须解包
解包后 才能参与计算, 使用 &#8216;!&#8217; 强行解包

func demo3() {

// 1. 原始的可选项定义 : none 没有值 或者 some 某一类值
let x: OptiOnal= 10

// 2. 简单定义 : '?' 用来定义 y 一个可选的 Int 类型, 可能没有值, 也可能有一个整数
let y: Int? = 40

// 输出 Optional(XX) , 提示这个一个可选值
print(x) // 输出-- Optional(10)
print(y) // 输出-- Optional(40)
// 1. 不同类型之间的值不能直接运算 ! 如果没有值 为 nil, 它不是任何数据类型, 不能参与计算, 所以 print(x + y) 会报错
// 2. '!' 强行解包 -- 从可选值中强行获取对应非空值, 如果真为 nil, 就会crash, 所以 程序中少用 '!'
print(x! + y!) // 输出-- 50
/* 最常见错误 let y: Int? = nil
unexpectedly found nil while unwrapping an Optional value.
在解包时候发现了 nil 值
*/
}

可选项 Optional 三种判断方式 (避免强行解包)

func judge1() {
/** ?? 是一个简单的三目
- 如果有值, 使用值
- 如果没有值, 使用 '??' 后面的值替代
*/
let name: String? = "张三" //输出-- 张三你好
// let name: String? = nil // 输出-- 你好

print((name ?? "") + "你好")

}

func judge2() {
/** 'if let/var' 连用语法, 只有{}内有效 */
let myName : String? = "李四"
let myAge: Int? = 40
// if let 连用, 判断对象的值是否为 nil
if let name = myName, let age = myAge {

// 进入分支后, name 和 age 一定有值, 不需要解包 ; name 和 age 作用域仅在 {} 中
print(name + String(age)) // 输出-- 李四40
}

}

func judge3() {
/** 'guard let/var else' 语法, {}外有效 */
let myName : String? = "王五"
let myAge: Int? = 50
//let myAge: Int? = nil
// 如果没有直接返回
guard let name = myName, let age = myAge else {

print("name 或 age 为 nil")
return
}
// 代码执行至此, name 与 age 一定有值
print(name + String(age)) // 输出-- 王五50

}

四 逻辑语句

// MARK: - if else
func demo () {

let x = 3
/**
1. 条件语句不需要 ()
2. 语句必须有 {}
3. 必须显示的指明具体的判断条件 => Swift中没有 '非零即真' 的概念. 只用 true/false
*/

if x > 5 {
/// Will never be executed
// 永远不被执行, 编译器编译的时候, 会做语法检查
print("大")
}else{
print("小")
}

/*'Int' is not convertible to 'Bool', 不会有OC中 '非零即真', 所以报错

if x {
print("真")
}
*/
/** 三目 */
let y = 3
y > 5 ? print("三目 : 大了") : print("三目 : 小了")

}

// MARK: - switch
func demo() {
/** switch 不再局限于整数, 可以针对 任意数据类型 进行判断 */
//String类型
let num = "9";

switch num {
case "10":
print("完美")
case "8", "9":
print("优")
case "7":
break
default:
print("合格")
}

}

// MARK: - for
func demo() {
/** Swift 取消了传统的for循环 (注意无空格) */
// 变量 i 在 [0, 5) 循环
for i in 0..<5 {
print(i)
}
print("----------")

// 变量 i 在 [0, 5] 循环
for i in 0...5 {
print(i)
}
print("反序遍历")
for i in (0..<10).reversed() {
print(i)
}

}

先简单介绍下Swift 变量常量, 可选项, 逻辑语句. 下篇可以介绍下 字符串, 数组, 字典等.

以 上 !


推荐阅读
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
author-avatar
狗狗狗699_250
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有