iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >Swift语言基础
  • 417
分享到

Swift语言基础

swiftios 2023-09-17 18:09:36 417人浏览 八月长安
摘要

swift基础 swift简介xcode项目文件语法变量与常量类型安全强制类型转换 运算符控制结构if语句switch语句 循环结构数组字典函数inout传递和地址传递函数类型函数

swift基础

swift简介

Swift 是一种支持多编程范式和编译式的开源编程语言,苹果于2014年WWDC(苹果开发者大会)发布,用于开发 iOS,OS X 和 watchOS 应用程序。

Swift 结合了 C 和 Objective-C 的优点并且不受 C 兼容性的限制。

Swift 在 Mac OS 和 ioS 平台可以和 Object-C 使用相同的运行环境。

官方手册:
swift官方手册
swift中文手册(5.0)

开发配置:xcode(开发工具),playground(编程环境)

xcode项目文件

launchscreen.storyboard:视图文件(一般是在app刚加载的时候一瞬间的闪现视图)

viewcontroller.swift:代码文件

info.plist:系统设置文件

main.stotyboard:视图文件

语法

变量与常量

注释:

// 单行注释

变量定义

var age = 18

常量定义

let age = 19

常见数据类型

类型关键字
整形Int
浮点型Double
布尔型Bool
字符串String

类型安全

值推断

// 自动推断为整形let age = 13var age = 19

类型声明

let age:Int = 13var high:Double = 1.2var name:String = "swift"var t:Bool = false

强制类型转换

var m:Double = 1.5var n:Int = (Int)m + 1

运算符

和:&&
非:!
或:||

控制结构

if语句

var p = 1if p > 1 {print(1)}else if p < 1 {print(0)}else {print(2)}

switch语句

var p = 1switch p {case 0:print(0)case 1:print(1)case 2:print(2)default:print(false)}

其他写法

var m = "o"switch m {case "a", "e", "i", "u", "e":print(true)default:print(false)}var n = 34switch n {case 0...100:// 包括100print(true)case 101..< 200:// 不包括200print(false)default:print("none")}var p = 12switch p {case Int.min...13:print(true)default:print(false)}

循环结构

for in

var arr:[Int] = [1, 2, 3]for f in arr {print(f)}

while

var i = 0while i < 10 {print(i)i += 1}

数组

创建一个数组

// 1var arr = [Int]()// 2var arr:[Int] = [1, 3, 4]// 3var arr = [Int](repeating: 10, count: 2)

修改数组

// 添加元素var arr = [Int]()arr.append(2)arr.append(3)arr += [4]// 合并数组var ar1 = [Int](repeating: 1, count: 3)var ar2 = [Int](repeating: 2, count: 10)var ar3 = ar1 + ar2

字典

创建字典

// 1var someDict = [Int: String]()// 2var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]

修改字典

// 添加或更新元素var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]var oldVal = someDict.updateValue("One 新的值", forKey: 1)// 移除元素var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]// 1var removedValue = someDict.removeValue(forKey: 2)// 2someDict[2] = nil

遍历字典

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]for (key, value) in someDict {   print("字典 key \(key) -  字典 value \(value)")}

字典转换成数组

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]let dicTKEys = [Int](someDict.keys)let dictValues = [String](someDict.values)

还有count判断键值对个数,isEmpty()判断是否为空

函数

func funcname(形参) -> returntype{   Statement1   Statement2   ……   Statement N   return parameters}

函数调用

func runoob(site: String) -> String {    return (site)}print(runoob(site: "www.runoob.com"))

返回值类型

// 元组func minMax(array: [Int]) -> (min: Int, max: Int)? {    if array.isEmpty { return nil }    var currentMin = array[0]    var currentMax = array[0]    for value in array[1..<array.count] {        if value < currentMin {            currentMin = value        } else if value > currentMax {            currentMax = value        }    }    return (currentMin, currentMax)}if let bounds = minMax(array: [8, -6, 2, 109, 3, 71]) {    print("最小值为 \(bounds.min),最大值为 \(bounds.max)")}// 无返回值func runoob(site: String) {    print("菜鸟教程官网:\(site)")}runoob(site: "Http://www.runoob.com")

参数范围

// 局部函数参数,number 为局部参数名,只能在函数体内使用func sample(number: Int) {    print(number)}sample(number: 1)sample(number: 2)sample(number: 3)// 外部函数参数名,在局部参数名前指定外部参数名,中间以空格分隔,外部参数名用于在函数调用时传递给函数的参数func pow(firstArg a: Int, secondArg b: Int) -> Int {   var res = a   for _ in 1..<b {      res = res * a   }   print(res)   return res}pow(firstArg:5, secondArg:3)

inout传递和地址传递

一般默认在函数中定义的参数都是常量参数,也就是这个参数你只可以查询使用,不能改变它的值。

如果想要声明一个变量参数,可以在参数定义前加 inout 关键字,这样就可以改变这个参数的值了

func  getName(_ name: inout String).........

一般默认的参数传递都是传值调用的,而不是传引用。所以传入的参数在函数内改变,并不影响原来的那个参数。传入的只是这个参数的副本。

当传入的参数作为输入输出参数时,需要在参数名前加 & 符,表示这个值可以被函数修改

func swapTwoInts(_ a: inout Int, _ b: inout Int) {    let temporaryA = a    a = b    b = temporaryA}var x = 1var y = 5swapTwoInts(&x, &y)print("x 现在的值 \(x), y 现在的值 \(y)")

函数类型

在 Swift 中,使用函数类型就像使用其他类型一样。例如,你可以定义一个类型为函数的常量或变量,并将适当的函数赋值给它

var addition: (Int, Int) -> Int = sum

函数嵌套

func calcDecrement(forDecrement total: Int) -> () -> Int {   var overallDecrement = 0   func decrementer() -> Int {      overallDecrement -= total      return overallDecrement   }   return decrementer}let decrem = calcDecrement(forDecrement: 30)print(decrem())

结构体和枚举

在此不做叙述

闭包

类和对象

计算属性

除存储属性外,类、结构体和枚举可以定义计算属性,计算属性不直接存储值,而是提供一个 getter 来获取值,一个可选的 setter 来间接设置其他属性或变量的值

class sample {    var no1 = 0.0, no2 = 0.0    var length = 300.0, breadth = 150.0        var middle: (Double, Double) {        get{            return (length / 2, breadth / 2)        }        set(axis){            no1 = axis.0 - (length / 2)            no2 = axis.1 - (breadth / 2)        }    }}var result = sample()print(result.middle)result.middle = (0.0, 10.0)print(result.no1)print(result.no2)

如果计算属性的 setter 没有定义表示新值的参数名,则可以使用默认名称 newValue

只读计算属性
只有 getter 没有 setter 的计算属性就是只读计算属性。

只读计算属性总是返回一个值,可以通过点(.)运算符访问,但不能设置新的值。

class film {    var head = ""    var duration = 0.0    var metaInfo: [String:String] {        return [            "head": self.head,            "duration":"\(self.duration)"        ]    }}var movie = film()movie.head = "Swift 属性"movie.duration = 3.09print(movie.metaInfo["head"]!)print(movie.metaInfo["duration"]!)

全局变量(static关键字)

struct Structname {   static var storedTypeProperty = " "   static var computedTypeProperty: Int {      // 这里返回一个 Int 值   }}enum Enumname {   static var storedTypeProperty = " "   static var computedTypeProperty: Int {      // 这里返回一个 Int 值   }}class Classname {   class var computedTypeProperty: Int {      // 这里返回一个 Int 值   }}

属性观察器

可以为属性添加如下的一个或全部观察器:

  • willSet在设置新的值之前调用
  • didSet在新的值被设置之后立即调用
  • willSet和didSet观察器在属性初始化过程中不会被调用
class Samplepgm {    var counter: Int = 0{        willSet(newTotal){            print("计数器: \(newTotal)")        }        didSet{            if counter > oldValue {                print("新增数 \(counter - oldValue)")            }        }    }}let NewCounter = Samplepgm()NewCounter.counter = 100NewCounter.counter = 800

注意:
不需要为无法重载的计算属性添加属性观察器,因为可以通过 setter 直接监控和响应值的变化。

构造器和析构器

// 构造器init() {// do something}// 析构器deinit() {// do something}

继承

class a {// do something}class b: a {// do something}

重写
子类可以通过继承来的实例方法,类方法,实例属性,或下标脚本来实现自己的定制功能,我们把这种行为叫重写(overriding)

通过使用super前缀来访问超类的方法,属性或下标脚本。

重写访问方法,属性,下标脚本
方法super.somemethod()
属性super.someProperty()
下标脚本super[someIndex]
class SuperClass {    func show() {        print("这是超类 SuperClass")    }}class SubClass: SuperClass  {    override func show() {        print("这是子类 SubClass")    }}let superClass = SuperClass()superClass.show()let subClass = SubClass()subClass.show()

swift协议

协议规定了用来实现某一特定功能所必需的方法和属性。

任意能够满足协议要求的类型被称为遵循(confORM)这个协议。

类,结构体或枚举类型都可以遵循协议,并提供具体实现来完成协议定义的方法和功能。

协议定义

protocol SomeProtocol {    // 协议内容}

遵循协议

struct SomeStructure: FirstProtocol, AnotherProtocol {    // 结构体内容}class SomeClass: SomeSuperClass, FirstProtocol, AnotherProtocol {    // 类的内容}

对属性的规定

protocol classa {        var marks: Int { get set }    var result: Bool { get }        func attendance() -> String    func markssecured() -> String    }protocol classb: classa {        var present: Bool { get set }    var subject: String { get set }    var stname: String { get set }    }class classc: classb {    var marks = 96    let result = true    var present = false    var subject = "Swift 协议"    var stname = "Protocols"        func attendance() -> String {        return "The \(stname) has secured 99% attendance"    }        func markssecured() -> String {        return "\(stname) has scored \(marks)"    }}let studdet = classc()studdet.stname = "Swift"studdet.marks = 98studdet.markssecured()print(studdet.marks)print(studdet.result)print(studdet.present)print(studdet.subject)print(studdet.stname)

不做过多叙述,详情可见swift协议规范

swift拓展

扩展就是向一个已有的类、结构体或枚举类型添加新功能。

扩展可以对一个类型添加新的功能,但是不能重写已有的功能。

Swift 中的扩展可以:

  • 添加计算型属性和计算型静态属性
  • 定义实例方法和类型方法
  • 提供新的构造器
  • 定义下标
  • 定义和使用新的嵌套类型
  • 使一个已有类型符合某个协议
extension SomeType {    // 加到SomeType的新功能写到这里}

详情可见swift拓展

来源地址:https://blog.csdn.net/qq_48322523/article/details/120176676

--结束END--

本文标题: Swift语言基础

本文链接: https://www.lsjlt.com/news/411286.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Swift语言基础
    swift基础 swift简介xcode项目文件语法变量与常量类型安全强制类型转换 运算符控制结构if语句switch语句 循环结构数组字典函数inout传递和地址传递函数类型函数...
    99+
    2023-09-17
    swift ios
  • python语言基础
    python基础语言 注释 单行注释:# 多行注释:''' ''' 或 """ """ 数字 整型(Int) - 通常被称为是整型或整数,是正或负整数,不带小数点。 长整型(long integers) - 无限大小的整数,整数最后是一个大...
    99+
    2023-01-31
    语言 基础 python
  • 【Python】Python语言基础(中)
    ❤️博客主页: iknow181 🔥系列专栏: Python、JavaSE、JavaWeb、CCNP 🎉欢迎大家点赞👍收藏⭐评论✍ 目录 第十章 Python的数据类型 基本数据类型...
    99+
    2023-10-18
    python 开发语言
  • Go语言的基础是什么语言?
    Go语言的基础是C语言和Pascal语言。Go语言是由Robert Griesemer、Rob Pike和Ken Thompson三位大牛联合开发的。他们在设计Go语言时,主要参考了C...
    99+
    2024-04-02
  • java语言基础学习
    个[@more@]string 类的主要方法public int length()public char charat(int index)public string tolowercase()public string toupperca...
    99+
    2023-06-03
  • php语言基础简介
    这篇文章给大家分享的是有关php语言基础简介的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的WEB站点。本教程并不...
    99+
    2023-06-17
  • Go语言基础并发channel
    这篇文章主要讲解了“Go语言基础并发channel”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言基础并发channel”吧!为什么需要channel...
    99+
    2024-04-02
  • C语言基础 strlen 函数
    目录一.strlen 函数简介二.strlen 函数实战一.strlen 函数简介 在C 语言中,char 字符串也是一种非常重要的数据类型,我们可以使用 strlen 函数获取字符...
    99+
    2024-04-02
  • Go语言基础之指针
    区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。 要搞明白Go语言中的指针需要先知道3个概念:指针地址、指针类型和指针取值。 Go语言中的指针 任何程序数据载入内存后,在内存都有他们的地址,这就是指针。而为了保存一...
    99+
    2023-08-30
    golang 开发语言 后端
  • C语言 基础60题(3)
    第17题int sum_nth(unsigned int num, unsigned int n);功  能:求出给定自然数的指定位置的数字(个位为0,十位为1,......)参  数:num为给定的自然数;n为指定位置.返回值:>=...
    99+
    2023-01-31
    语言 基础
  • python入门之语言基础
    目录1、注释2、代码缩进3、保留字4、标识符5、变量6、基础数据类型7、数据类型转换总结1、注释 注释是指在程序代码中添加的标注性的文字 单行注释:使用 # 注释内容 多行注释:在...
    99+
    2024-04-02
  • Python语言基础之函数语法
    目录1 匿名函数(lambda 函数)2 python中函数的可变参数在 Python 中,函数可以通过以下语法定义和使用: def function_name(parameter1...
    99+
    2023-05-19
    Python语言基础 Python函数语法 Python函数
  • linux swift是不是语言
    这篇文章主要介绍“linux swift是不是语言”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“linux swift是不是语言”文章能帮助大家解决问题。 ...
    99+
    2023-04-20
    linux
  • asp语言基础语法有哪些
    ASP(Active Server Pages)是一种动态网页开发技术,它使用VBScript(Visual Basic Scrip...
    99+
    2023-09-21
    asp
  • C 语言基础之初识 C 语言常量
    目录1、字面常量2、const修饰的常变量3、#define定义的标识符常量(也叫预处理)4、枚举常量C语言中的常量分为以下几种: 字面常量 const修饰的常变量...
    99+
    2024-04-02
  • Python基础--Python3基础语
    Python3 基础语法编码默认情况下,Python3源码文件以UTF-8编码,所有字符串都是Unicode字符串。当然也可以为源码文件指定不同的编码,例如:# -*- coding: cp-1252 -*-标识符1.第一个字符必须是字母表...
    99+
    2023-01-31
    基础 Python
  • 详解C语言初阶基础
    目录1.什么是c语言2.初始化:3.变量和常量4.作用域与生命周期简单阐述:作用域:生命周期(存在与消失):作用域与生命周期的区别作用域:生命周期:5.    &...
    99+
    2024-04-02
  • PHP7语言基础示例分析
    这篇文章主要介绍了PHP7语言基础示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。文章目录PHP标记PHP指令分隔符PHP注释常量PHP变量数据类型转换为布尔值转换为整...
    99+
    2023-06-14
  • 0基础如何学go语言
    0基础学习Go语言需要分阶段进行,从基础知识到实践项目,逐步深入。以下是一个建议的学习路径:1、学习基础知识:了解编程基本概念,如变量、数据类型、运算符、控制结构等。学习Go语言的基本语法,如变量声明、数据类型、运算符、控制结构、函数等。学...
    99+
    2023-10-26
    go语言
  • C语言零基础入门(2)
    目录1. 数组1.1 一维数组1.1.1 一维数组的定义1.1.2 一维数组的初始化1.1.3 一维数组的引用1.2 二维数组及多维数组1.2.1 二维数组的定义1.2.2 二维数组...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作