2020-11-26

swift 基础知识

1.常量声明

常量声明用 let
let locationName = “苏州”

2.变量声明

变量声明用var
var lan = 40.0

3.常量和变量的命名规则

1)不能包含空格、运算符等特殊符号
2)可以包含数字,但是不能以数字开头
3)不能以系统关键字命名

4.数据类型声明

整形 Int,浮点型 Double Float,字符串 String
var currentYear:Int = 2018
var floatResult:Float= 8/6
*数据类型不一致不能赋值

5.类型推断

var nextYear = 2019 //swift 会推算出是Int 类型

6.类型转换

let totalScore = 947.5
let numberOfStudents = 10
let average = totalScore/ Double(numberOfStudent)  //将numberOfStudent转换成Double

7.函数的声明和调用

  • 函数的声明
func sum(number1:Int,number2:Int){
     let result= number1+number2
}
  • 函数的调用
sum(number1: 2, number2: 3)
  • 带返回值的函数
func sum(number1:Int,number2:Int) ->Int{
     return number1+number2
}
  • 函数的参数名和参数标签(外部参数名和内部参数名)
func flight(from departure:String,to arrival:String){   
print("这是一趟\(departure)飞往\(arrival)的航班")
}
flight(from:"上海",to:"北京")
  • 用**_**来代替外部参数名,这样可以隐藏外部参数名
func cube(_number:Int) -> Int{   
return number*number*number
}
cube(4)

8.元祖

var mountain = ("珠穆朗玛峰",8848.44,"中国与尼泊尔的边境线")
let(name, height, position) = mountain
print("名称\(name), 高\(height)")

let(justName, _, andPosition) = mountain

swift 中下划线常常用来忽略某些东西

9.区间表示

1…5 封闭范围
1…<5半开范围
18… 到最大值
…14 从最小值

10.混合运算符

var number = 1
number += 10
number -= 10
number *= 10
number /= 10

11.控制转移语句

 for i in 1...10{
      if i == 5 {
            continue   // 停止本次循环,进入下次循环    
            break // 结束整个循环
      }
      print(i)
 }

12.guard语句

func checkProduct(real: Bool, date: Bool)->String{
       //if real != true { return "假冒"}
      // if date != true {return "过期"}
       guard real = true else {return "假冒"}
       guard date = true else{return "过期"}
       return "合格"
}
checkProduct(real:true, date:false)

13.可选类型

  • 定义可选类型
 var job: String?

可选类型没有值时是不可以展开的 如 job

var optionalNumber: Int? = 2
var sum = optionalNumber! +3 //强制解析(可选类型加!就是将可选类型展开)
  • 空合运算符
print(job ?? “没有工作")  //  没有工作
job = ”老师“
print(job ?? "没有工作"//老师
  • 隐式解析
var optionalDecimal: Double! = 2.5 //隐式解析必须有值否则会报错
optionalDecimal +3   //使用时swift自动展开
  • if语句配合可选类型的展开
var optionalInt: Int? = 3
if optionalInt != nil{
    optionalInt !+= 3
}
  • 可选绑定
var optionalDouble: Double ? = 2.5
if let double = optionalDouble{
     double +=3
}
  • guard语句的可选绑定
func register(username:String?, password:String?)->String{
     guard let username = username else {return "没有用户名"}
     guard let password = password else {return "没有密码"}
     return
}
register(username:"admin",password:"123")

14.枚举

enum Direction{
     case east 
     case west 
     case south 
     case north
}
enum AppleOS{
     case iOS, macOS, watchOS, tvOS
}
var walk = Direction.north
walk = .east
  • 使用switch语句来匹配枚举值
switch walk {
    case .east:
          print("在东边")
    case .west:
           print("在西边")
    case .south:
    case .north:    
}
switch walk {
    case .east:
          print("在东边")
    case .west:
           print("在西边")
    default:   
}

当各种情况没有列举完全时可以用 default

15.类和结构体的声明

类和结构体的命名方式也是驼峰命名,但是要求首个单词的首字母也大写

  • 结构体的声明
struct Resolution{
    var width = 0
    var height = 0
}
  • 类的声明
class Player {
     var name = ""
     var HP = 100
     var ATK = 300
}
  • 类和结构体的实例

类和结构体都要先实例才能访问和修改属性i

var resolution = Resolution()
var player1 = player()
var player2 = player()
  • 属性的访问和修改
resolution.width = 1920
resolution.height = 1080

player1.name = "111"
player2.name = "222"
  • 结构体和类的区别

结构体在声明之后系统会生成一个成员逐一构造函数,用于初始化新的结构体实例中每一个成员的属性.
类没有成员逐一构造函数,但是类和结构体都可以自定义构造函数

  • 结构体的成员逐一构造函数
let vga = Resolution(width: 640, height: 480)
  • 结构体是值类型
var  hd = Resolution(width: 320, height: 480)
var cinema = hd
cinema.width = 2048
print("cinema =  \(cinema.width)")
print("hd =  \(cinema.width)")

结果是:cinema = 2048
hd = 320
结构体是值类型的数据,值类型被赋予一个变量、常量,或者被传递给一个函数的时候,他的值会被复制。结构体是值类型,这意味着它的实例以及实例中所包含的属性在代码中传递的时候会被复制

  • 类是引用类型
var player = Player()
player.name = "333"
player.HP = 200
player.ATK = 50

var shadow = player
shadow.HP -= 30
print("shadow = \(shadow.HP)")
print("player = \(player.HP)")

结果是:
shadow = 170
player = 170
类是引用类型的数据,值类型被赋予一个变量、常量,或者被传递给一个函数的时候,他的值不会被复制,而是引用已经存在的实例。

  • 类的继承
//基类
class Vehicle {
      var currentSpeed = 0.0
      func makeNoise(){
      }
}
//子类的声明
class Bicycle: Vehicle {
      var hasBasket = false
}

let bicycle = Bicycle()
bicycle.hasBasket = true 
bicycle.currentSpeed = 15

//子类还可以被其他类继承
class Tandem: Bicycle {
     var currentNumberOfPassengers = 0
}

let tandem = Tandem()
tandem.hasBasket = true 
tandem.currentNumberOfPassengers = 2
tandem.currentSpeed = 22

//类的重写
class Train: Vehicle {
     override func makeNoise(){//重写类的方法
     print(”咔咔咔咔咔咔“)
     }
     
}

let train = Train()
train.makeNoise()
bicycle.makNoise()

一个类可以继承另一个类的方法、属性和其他特性。当一个类继承其他类时,继承类叫做子类,被继承的类叫做父类或超类。在swift中继承是区别类与其他类型的一个基本特征

  • 构造函数(构造器)
class Box { 
    var length: Double
    var width: Double
    var height: Double
     init(length: Double, width: Double, height: Double){
           self.length = length
           self.width = width
           self.height = height
     }
     init(cube sideLength: Double){
           length = sideLength
           width = sideLength
           height = sideLength
     }
}
let box = Box(length: 3, width: 2, height: 4)
let cube = Box(cube: 6)

类和结构体在创建实例时,必须为所有属性设置合适的初始值,我们可以通过构造函数来实现实例的初始化。

16.数组

  • 数组的声明
var someOddNumbers = [Int]()//声明空数组
var someEvenNumbers = [2, 4, 6, 8]//通过字面量声明
  • 通过现有数组声明
var shoppingList = ["薯片", "辣条", "火腿肠"]
var extraList = ["可乐","口香糖"]
var completeList = shoppingList + extraList
  • 访问和修改数组的元素
shoppingList[0] = "面包"
  • 添加元素
someOddNumbers.append(1)
someOddNumbers += [5, 7, 9]
someOddNumbers.insert(3, at: 1)// at 是插入的位置,在指定位置插入数据
  • 删除元素
someEvenNumbers.removeFirst()
someEvenNumbers.remove(at: 1)//删除指定位置的数据

someEvenNumbers.count
someEvenNumbers.isEmpty

17.字典

字典的声明
var olympicGames: Dictionary<Int, String> = [2016: “巴西里约”, 2012:“英国伦敦”]
常用的声明方法
var dictionary = [String: Int()]
var provincialCapitals = [“江苏”: “南京”, “湖北”:“武汉”]

18.集合

  • 集合的声明
var favouriteGenres: Set<String> = ["流行", "古典"]
  • 通过类型推断声明集合
var hobbiesA: Set = ["Q","E","R","T"]
var hobbiesB: Set = ["A","D","E","F"]
hobbiesA.intersection(hobbiesB)//交集
hobbiesA.union(hobbiesB)//并集
hobbiesA.subtract(hobbiesB)//差集
hobbiesA.symmetricDifference(hobbiesB)//对称差
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页