在 Swift 编程的世界里,深入理解数据类型和熟练运用运算符是构建强大、高效应用的基石。让我们一同开启这场探索之旅。
一、字符串类型(String)
字符串在 Swift 中有丰富多样的操作方式。
首先是字符串的初始化和基本操作:
var name4 = "张小凡"
var text4 = ""
var text41 = String()
var text42 = String(repeating: "a", count: 10)
print(text42)
repeating: 被循环的字符
count:循环次数,所以他输出的是aaaaaaaaaa
多行字符串的输出方式值得注意,以下是两种常见的形式:
var text43 = """
中国
人民
站起来了
"""
print(text43)
var text44 = """
中国\
人民\
站起来了
"""
print(text44)
text43:原格式输出,输出结果带有\n
text44:一行输出
对于字符串中的转义字符和特殊引用,也有特定的处理方式:
var text45 = "\"中国\""
print(text45)
var text46 = #""China"#
print(text46)
text45:输出:“中国”
text46 :输出:“China”
类型相加和各种字符串的属性及方法也很实用:
var text51 = "张三"
var age51 = 30
var hello51 = "是个好同志"
//字符串连接
print(text51 + hello51)
print(text51.appending(hello51))
print("\(text51)年龄是:\(age51)51 岁")
//判空
print(text51.isEmpty)
//长度
print(text51.count)
//描述
print(age51.description)
print(text51.debugDescription)
//hash
print(text51.hashValue)
var str5 = "This is a Test"
//转大写
print(str5.uppercased())
//转小写
print(str5.lowercased())
//字符串判断
print("ab" == "ab")
print("ab"!= "ab")
//判断前缀
print("productNum".hasPrefix("product"))
//判断后缀
print("productNum".hasSuffix("product"))
//循环索引,index不是数字
for index in str5.indices {
print(index, str5[index])
}
//开始索引
print(str5[str5.startIndex])
//从后往前向前输出两个字符
print(str5[str5.index(str5.endIndex, offsetBy: -2)])
//输出最前的字符
print(str5[str5.index(before: str5.endIndex)])
二、整数类型(Int)
整数类型的定义和操作多样且灵活:
var age:Int = 40
var myAge = Int(50)
var a = +9,b = -9
var m = 0b10 // 二进制
var n = 0o7 // 八进制
var k = 0xf // 十六进制
var d = 89_100_39
var price = Int("3")?? 0
var pricel = Int("ff", radix: 16)?? 0
print(Int.random(in: 1...100))
print(Int.random(in: 1..<110))
整数之间的运算和比较操作常见且基础:
var z = 10
var s = 200
print(z+s)
print(z-s)
print(z*s)
print(z/s)
print(z == s)
print(z!= s)
print(z > s)
print(z >= s)
print(z < s)
print(z <= s)
此外,还有取相反数、绝对值等特殊操作:
var x = -21
//取相反数
x.negate()
print(x)
x = -30
//取绝对值
print(x.magnitude)
print(abs(-69)) //不推荐的用法
x = 100
//获取整数及他的余数
let (q,r) = x.quotientAndRemainder(dividingBy: 9)
print(q,r)
//判断正负数
print(x.signum())
//一些常量
print(Int.zero)
print(Int.max)
print(Int.min)
//描述
print(23.description+"asa")
print(23.hashValue)
三、双精度浮点数类型(Double)
双精度浮点数的定义和操作各有特点:
var c = 10.0
var a:Double = 10.0
var b = Double(10)
var d = Double.random(in: 10.0...100.0)
var x = 100.23
其提供了丰富的数学计算方法,如平方根计算、取整等:
//平方根
print(x.squareRoot())
//四舍五入
print(x.rounded())
//向上取整
print(x.rounded(.awayFromZero))
print(x.rounded(.up))
//向下取整
print(x.rounded(.down))
print(x.rounded(.toNearestOrAwayFromZero))
print(x.rounded(.toNearestOrEven))
print(x.rounded(.towardZero))
绝对值和符号的获取也很方便:
x = -1.1
print(x.magnitude)
print(x.sign)
print(Double.zero)
print(Double.pi)
print((23.0).description+"asa")
print((23.1).hashValue)
四、布尔类型(Bool)
布尔类型的使用简单直接:
var x = true
var y:Bool = false
//取反
x.toggle()
//随机数
print(Bool.random())
print(x.hashValue)
五、数据运算符
从一元运算符到三元运算符,涵盖了各种常见的运算形式:
var a = 1
print(-a)
print(1+3)
print(3 > 2? 10 : 20)
var (c,b) = (10,20)
空盒运算符用于处理可空值,区间运算符方便定义范围,逻辑运算符则用于布尔值的组合和操作:
//判空!!!!!
var h:String?
print(h?? "11454")
for index in 1...10{
print(index,terminator: " ")
}
var j = true
var l = false
print(j && l)
print(j || l)
print(!j)
六、实际应用:计算圆的面积和周长
func calculation_of_circles(){
print("请输入圆的半径:",terminator: "")
//一定要做好判空
var r = readLine()?? "0.0"
var radius:Double = 0.0
radius = Double(r)?? 0.0
let area = Double.pi * radius * radius
let perimeter = 2 * Double.pi * radius
print("半径为\(r)的圆,周长是:\(perimeter.rounded()),面积是:\(perimeter.rounded())")
}
七、全部源码
//
// string_study.swift
// StudySwift
//
// Created by YuJun on 2024/7/20.
//
import Foundation
func string_study(){
/**
4.字符串的基本操作
*/
var name4 = "张小凡"
var text4 = ""
var text41 = String()
var text42 = String(repeating: "a", count: 10)
print(text42)
var text43 = """
中国
人民
站起来了
"""
print(text43)
//多行原格式输出需要三个引号
var text44 = """
中国\
人民\
站起来了
"""
print(text44)
var text45 = "\"中国\""
print(text45)
//#"文字内容"#中间引号不需要转意
var text46 = #""China"# //输出"China
print(text46)
/**
5.类型相加
*/
var text51 = "张三"
var age51 = 30
var hello51 = "是个好同志"
print(text51 + hello51)
print(text51.appending(hello51))
print("\(text51)年龄是:\(age51)51岁")
print(text51.isEmpty)
print(text51.count)
print(age51.description)
print(text51.debugDescription)
print(text51.hashValue)
var str5 = "This is a Test"
print(str5.uppercased())
print(str5.lowercased())
print("ab" == "ab")
print("ab" != "ab")
print("productNum".hasPrefix("product"))
print("productNum".hasSuffix("product"))
//indices意思为索引//注意index不是数字
for index in str5.indices{
print(index,str5[index])
}
//输出开始一个字符和最后一个字符
print(str5[str5.startIndex])
//最后一个是不存在的,字符串最后一个往往是空指针就像数组一样
//print(str5[str5.endIndex])
print(str5[str5.index(str5.endIndex,offsetBy: -2)])
print(str5[str5.index(before: str5.endIndex)])
}
//
// data_type.swift
// StudySwift
//
// Created by YuJun on 2024/7/20.
//
import Foundation
func data_type_int(){
//指定数据类型
var age:Int = 40
print(age)
var myAge = Int(50)
print(myAge)
var a = +9,b = -9
print(a,b)
var m = 0b10 //二进制
var n = 0o7 //八进制
var k = 0xf //16禁止
print(m,n,k)
var d = 89_100_39 //实际还是8910039,主要目的是增加可读性
print(d)
var price = Int("3") ?? 0 //意思是3可能不是个数字,如果不是数字转化为0
print(price)
var pricel = Int("ff",radix: 16) ?? 0 //意思是ff转化为16进制,转化不成功为0
print(pricel)
print(Int.random(in: 1...100)) //输出一个1-100的随机数
print(Int.random(in: 1..<110)) //输出一个1..109的随机数
//运算符
var z = 10
var s = 200
print(z+s)
print(z-s)
print(z*s)
print(z/s)
print(z == s)
print(z != s)
print(z > s)
print(z >= s)
print(z < s)
print(z <= s)
var x = -21
x.negate()//取相反数
print(x)
x = -30
print(x.magnitude) //取绝对值
print(abs(-69)) //也是取绝对值,不推荐使用
x = 100
let (q,r) = x.quotientAndRemainder(dividingBy: 9)
print(q,r) // 输出11 1 意思是100/9=11%1
print(x.signum()) // 返回正负数 -1=负数 1=正数 0 = 0
print(Int.zero) // 常量 0
print(Int.max) //常量 int的最大值
print(Int.min) //常量 int 的最小值
print(23.description+"asa") //23的描述,类似于toString
print(23.hashValue) // 23的hash
}
func data_type_double(){
var c = 10.0
var a:Double = 10.0
var b = Double(10)
print(a,b,c)
var d = Double.random(in: 10.0...100.0)
print(d)
var f = Double.random(in: 10.0..<100.0)
var x = 100.23
print(x.squareRoot()) //平方根
print(x.rounded()) //四舍五入
print(x.rounded(.awayFromZero)) //下面的基本可以理解为向上取整
print(x.rounded(.up))
print(x.rounded(.down)) //下面的都可以基本认为向下取整
print(x.rounded(.toNearestOrAwayFromZero))
print(x.rounded(.toNearestOrEven))
print(x.rounded(.towardZero))
x = -1.1
print(x.magnitude) // 绝对值
print(x.sign) //符号 plus = + minus = -
print(Double.zero)
print(Double.pi) //常量 pi值
print((23.0).description+"asa") //23的描述,类似于toString
print((23.1).hashValue)
}
func data_type_bool(){
var x = true
var y:Bool = false
x.toggle() //取反
print(x)
print(Bool.random())//随机,独有的
print(x.hashValue)
}
func data_operator(){
var a = 1
print(-a) //一元运算符
print(1+3) //二
print(3 > 2 ? 10 : 20) //三
var (c,b) = (10,20)
//剩下的都一样基本上
//+-*/%
//> < = >= <= == !=
//空盒运算符
var h:String?
print(h ?? "11454") // 判空
var o:String? = nil
print(h)
var p:String? = "a"
print(p)
//区间运算符
//...10
//1...10
//0...
//..<10
for index in 1...10{
print(index,terminator: " ")
}
var j = true
var l = false
print(j && l)
print(j || l)
print(!j)
}
//计算圆的面积和周长
func calculation_of_circles(){
//swift最麻烦的地方就是这些空置运算,很烦
print("请输入圆的半径:",terminator: "")
var r = readLine() ?? "0.0"
var radius:Double = 0.0
radius = Double(r) ?? 0.0
let area = Double.pi * radius * radius
let perimeter = 2 * Double.pi * radius
print("半径为\(r)的圆,周长是:\(perimeter.rounded()),面积是:\(perimeter.rounded())")
}
关注公众号:资小库,问题快速答疑解惑