Swift在线运行

版本:

所属目录
点击了解高性能代码运行API
运行结果
教程手册
代码仓库
极速运行
终端运行
图形+终端

                        
以下是用户最新保存的代码
静态属性的意义 发布于:2024-11-27 10:32 字符串拼接 发布于:2024-11-18 11:48 必须要先点这里吗?这么多空意味着可以写很多? 发布于:2024-11-17 15:50 自然相机拍 发布于:2024-09-24 23:09 UIkit学习 发布于:2024-10-12 16:49 实操遇到的问题 发布于:2024-11-30 20:36 协议的使用 发布于:2024-09-18 13:03 不是为了记笔记 发布于:2024-11-28 11:26 探索状态值 发布于:2024-12-01 08:44 的撒大大的 发布于:2024-08-13 11:50 SwiftUI探索3 发布于:2024-12-01 10:06 study swfit 发布于:2024-08-12 18:10 swfft创建 发布于:2024-08-12 18:09 再学习,弄懂不会的 发布于:2024-11-17 13:25 swiftUI学习2 发布于:2024-11-17 14:24 swiftUI初学 发布于:2024-11-29 10:39 闭包的理解 发布于:2024-09-10 16:58 搞怪记单词 发布于:2024-11-17 16:28 高性能计算器 发布于:2024-06-05 00:42 功能一和功能二 发布于:2024-05-29 00:57 高性能计算机 发布于:2024-05-21 19:55 简单计算器 发布于:2024-05-21 16:37 这是一个测试程序 发布于:2024-04-29 16:09 类的继承实验 发布于:2024-04-25 09:53 商店点单实验 发布于:2024-04-25 09:36 1. 在Xcode集成开发环境下,编写一个完整的Swift语言程序,在该程序中,定义了四个类。首先定义了类表示食品,该类中具有三个个属性分别表示名称、价格和数量,基本的初始化器和计算原始总价和打折后的总价方法; 2. 定义了类Vegetables,表示蔬菜,在类中先为其定义初始化器。然后覆盖父类中的两个方法,分别用来计算某一蔬菜原始总价和打九折后的总价; 3. 定义了类Fruits,表示水果,在类中先为其定义初始化器。接着覆盖父类中的两个方法,分别用来计算某一水果原始总价和打八折后的总价; 4. 定义了类Meats,表示肉类,在类中先为其定义初始化器。接着覆盖父类中的两个方法,分别用来计算某一肉类原始总价和打七折后的总价; 5. 在完成上述的四个类的定义之后,分别创建类Vegetables、类Fruits和类Meats的若干实例,并分别对每一个实例进行相应的赋值。将每一个实例的原始总价和打折后的总价进行求和赋给变量sum,最后再将变量sum的值进行输出打印。 发布于:2024-04-24 08:19 高性能计算器 发布于:2024-04-24 08:03 阶段性测试,计算器 发布于:2024-04-21 19:15 ## 大作业version 1.001 使用Swift语言设计一个高性能计算器,具有以下功能: (1)基本功能(80分) (i)具有二级运算符识别功能。在控制台下输入一个表达式,例如,输入 3+5*4,可以按输入的表达式中的运算符优先级进行处理,得到23。 (ii)具有括号优先级识别功能。在控制台上输入一个表达式,例如,输入1+(3+5)*4,可以按输入的表达式中的括号和运算符串的优先级进行处理,得到33。 (iii)设计的计算器可实现实数(含整数)的加、减、乘、除、乘方和开方运算。 (2)拓展功能(20分) (i)设计的计算器可实现复数的加、减、乘、除运算,具有正弦函数计算功能; (ii)设计的计算器可实现无穷精度的整数的加、减、乘、除、求模运算(提示,使用字符串)。 备注: 建议使用图形界面实现上述功能。 发布于:2024-04-17 09:27 复数Complx ** ** 在这个程序中,handleComplexOperations 函数负责处理用户输入,并调用 parseComplexFromString 来解析输入的复数字符串,然后调用 applyOp_Complx 来执行相应的复数运算。最后,它使用 printComplex 函数来打印结果。 请注意,applyOp_Complx 函数现在检查除数是否为零,以避免除以零的错误。在实际应用中,你可能还需要添加更多的错误处理和输入验证,以确保程序的健壮性。此外,程序假设用户会按照正确的格式输入复数和操作符,没有实现复杂的错误恢复机制。在实际应用中,你可能需要增加对用户输入的校验和提示。 发布于:2024-04-17 09:09 ### 大作业 最终版本 ** ** 使用Swift语言设计一个高性能计算器,具有以下功能: (1)基本功能(80分) (i)具有二级运算符识别功能。在控制台下输入一个表达式,例如,输入 3+5*4,可以按输入的表达式中的运算符优先级进行处理,得到23。 (ii)具有括号优先级识别功能。在控制台上输入一个表达式,例如,输入1+(3+5)*4,可以按输入的表达式中的括号和运算符串的优先级进行处理,得到33。 (iii)设计的计算器可实现实数(含整数)的加、减、乘、除、乘方和开方运算。 (2)拓展功能(20分) (i)设计的计算器可实现复数的加、减、乘、除运算,具有正弦函数计算功能; (ii)设计的计算器可实现无穷精度的整数的加、减、乘、除、求模运算(提示,使用字符串)。 备注: 建议使用图形界面实现上述功能。 发布于:2024-04-17 09:38 1. 其它 1. 基于Xcode集成开发环境下,编写一个完整的Swift语言程序,该程序实现将一个简单的学生信息查找功能,首先自定义一个结构体Students,要求结构体内具有六个属性,分别表示学生的姓名、学号、性别、语文成绩、数学成绩和英语成绩,同时还有初始化器、用于计算学生总成绩的方法等等; 2. 完成结构体的定义之后,首先创建多个结构体Students实例s1、s2…,并对其进行相应的赋值; 3. 输出信息提示用户输入想要查找的学生姓名或学号,使用输入函数读取键盘的输入并将其保存在变量str中,使用if-else结构进行判断,将用户输入的信息分为姓名和学号两类分别进行查找,查找到指定的学生后,将其个人信息、各科成绩以及总成绩进行输出,若没有找到指定的学生,则输出相应的提示性信息。 提交 发布于:2024-04-17 08:15 冒泡排序小到大 发布于:2024-04-03 09:33 使用Swift语言设计一个高性能计算器,具有以下功能: (1)基本功能(80分) (i)具有二级运算符识别功能。在控制台下输入一个表达式,例如,输入 3+5*4,可以按输入的表达式中的运算符优先级进行处理,得到23。 (ii)具有括号优先级识别功能。在控制台上输入一个表达式,例如,输入1+(3+5)*4,可以按输入的表达式中的括号和运算符串的优先级进行处理,得到33。 (iii)设计的计算器可实现实数(含整数)的加、减、乘、除、乘方和开方运算。 (2)拓展功能(20分) (i)设计的计算器可实现复数的加、减、乘、除运算,具有正弦函数计算功能; (ii)设计的计算器可实现无穷精度的整数的加、减、乘、除、求模运算(提示,使用字符串)。 备注: 建议使用图形界面实现上述功能。 发布于:2024-04-03 09:58 商店点单。 发布于:2024-04-01 11:21 创建数据库 发布于:2024-03-23 08:42 输入输出程序 发布于:2024-03-20 09:08 ###.Exp1 1.编写一个完整的Swift语言程序。首先,输出语句提示用户输入一个字符串,调用输入函数读取键盘,并将读取得到的字符串赋给变量fruit; 2. 重复上一步的操作,将读取的字符串赋给变量price,对变量price进行判断,如果该字符串含有0~9以外的字符,则提示用户重新输入一个字符串,否则就将price强制类型转换为int型再赋给p1,将以十进制数形式表示的字符串转化为整数,赋给p2; 3. 创建一个非空的字典类型变量dic和一个空的数组变量arr,将变量fruit-变量price作为一组键值对,添加到变量dic中,使用for-in结构对变量dic的值进行遍历并添加到数组变量arr中,在完成循环之后,对变量arr进行删除和元素访问操作。 发布于:2024-03-13 10:00 输入与输出实验 发布于:2024-05-29 08:21 实验四、学生信息查询实验 发布于:2023-12-06 06:47 课内作业,约瑟夫算法 发布于:2023-11-20 08:55 综合性实验 发布于:2023-11-16 11:02 找出多个数组中的最大数字 发布于:2023-09-22 17:22 实验五 Swift枚举&协议&扩展&泛 发布于:2023-09-20 18:41 swift输入输出类型 发布于:2023-09-13 13:38 实验四 函数类型 发布于:2023-09-17 13:17 斐波那契数列的动态规划和递归形式 发布于:2023-09-11 14:09 day03 数组,集合,字典,字符串 发布于:2023-09-11 11:45 实验三,数组 发布于:2023-09-17 12:58 Swift运算符&控制流 发布于:2023-09-06 16:06 [更多]
显示目录

属性



学习嵌入式的绝佳套件,esp8266开源小电视成品,比自己去买开发板+屏幕还要便宜,省去了焊接不当搞坏的风险。 蜂鸣版+触控升级仅36元,更强的硬件、价格全网最低。

点击购买 固件广场

Swift 属性

Swift 属性将值跟特定的类、结构或枚举关联。

属性可分为存储属性和计算属性:

存储属性 计算属性
存储常量或变量作为实例的一部分 计算(而不是存储)一个值
用于类和结构体 用于类、结构体和枚举
存储属性和计算属性通常用于特定类型的实例。 属性也可以直接用于类型本身,这种属性称为类型属性。

另外,还可以定义属性观察器来监控属性值的变化,以此来触发一个自定义的操作。属性观察器可以添加到自己写的存储属性上,也可以添加到从父类继承的属性上。


存储属性

简单来说,一个存储属性就是存储在特定类或结构体的实例里的一个常量或变量。

存储属性可以是变量存储属性(用关键字var定义),也可以是常量存储属性(用关键字let定义)。

  • 可以在定义存储属性的时候指定默认值

  • 也可以在构造过程中设置或修改存储属性的值,甚至修改常量存储属性的值

import Cocoa

struct Number
{
   var digits: Int
   let pi = 3.1415
}

var n = Number(digits: 12345)
n.digits = 67

print("\(n.digits)")
print("\(n.pi)")

以上程序执行输出结果为:

67
3.1415

考虑以下代码:

let pi = 3.1415

代码中 pi 在定义存储属性的时候指定默认值(pi = 3.1415),所以不管你什么时候实例化结构体,它都不会改变。

如果你定义的是一个常量存储属性,如果尝试修改它就会报错,如下所示:

import Cocoa

struct Number
{
    var digits: Int
    let numbers = 3.1415
}

var n = Number(digits: 12345)
n.digits = 67

print("\(n.digits)")
print("\(n.numbers)")
n.numbers = 8.7

以上程序,执行会报错,错误如下所示:

error: cannot assign to property: 'numbers' is a 'let' constant
n.numbers = 8.7

意思为 'numbers' 是一个常量,你不能修改它。


延迟存储属性

延迟存储属性是指当第一次被调用的时候才会计算其初始值的属性。

在属性声明前使用 lazy 来标示一个延迟存储属性。

注意:
必须将延迟存储属性声明成变量(使用var关键字),因为属性的值在实例构造完成之前可能无法得到。而常量属性在构造过程完成之前必须要有初始值,因此无法声明成延迟属性。

延迟存储属性一般用于:

  • 延迟对象的创建。

  • 当属性的值依赖于其他未知类

import Cocoa

class sample {
    lazy var no = number() // `var` 关键字是必须的
}

class number {
    var name = "小白 Swift 教程"
}

var firstsample = sample()
print(firstsample.no.name)

以上程序执行输出结果为:

小白Swift 教程

实例化变量

如果您有过 Objective-C 经验,应该知道Objective-C 为类实例存储值和引用提供两种方法。对于属性来说,也可以使用实例变量作为属性值的后端存储。

Swift 编程语言中把这些理论统一用属性来实现。Swift 中的属性没有对应的实例变量,属性的后端存储也无法直接访问。这就避免了不同场景下访问方式的困扰,同时也将属性的定义简化成一个语句。

一个类型中属性的全部信息——包括命名、类型和内存管理特征——都在唯一一个地方(类型定义中)定义。


计算属性

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

import Cocoa

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)

以上程序执行输出结果为:

(150.0, 75.0)
-150.0
-65.0

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


只读计算属性

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

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

import Cocoa

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.09

print(movie.metaInfo["head"]!)
print(movie.metaInfo["duration"]!)

以上程序执行输出结果为:

Swift 属性
3.09

注意:

必须使用var关键字定义计算属性,包括只读计算属性,因为它们的值不是固定的。let关键字只用来声明常量属性,表示初始化后再也无法修改的值。


属性观察器

属性观察器监控和响应属性值的变化,每次属性被设置值的时候都会调用属性观察器,甚至新的值和现在的值相同的时候也不例外。

可以为除了延迟存储属性之外的其他存储属性添加属性观察器,也可以通过重载属性的方式为继承的属性(包括存储属性和计算属性)添加属性观察器。

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

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

  • willSet 在设置新的值之前调用
  • didSet 在新的值被设置之后立即调用
  • willSet和didSet观察器在属性初始化过程中不会被调用
import Cocoa

class Samplepgm {
    var counter: Int = 0{
        willSet(newTotal){
            print("计数器: \(newTotal)")
        }
        didSet{
            if counter > oldValue {
                print("新增数 \(counter - oldValue)")
            }
        }
    }
}
let NewCounter = Samplepgm()
NewCounter.counter = 100
NewCounter.counter = 800

以上程序执行输出结果为:

计数器: 100
新增数 100
计数器: 800
新增数 700

全局变量和局部变量

计算属性和属性观察器所描述的模式也可以用于全局变量和局部变量。

局部变量 全局变量
在函数、方法或闭包内部定义的变量。 函数、方法、闭包或任何类型之外定义的变量。
用于存储和检索值。 用于存储和检索值。
存储属性用于获取和设置值。 存储属性用于获取和设置值。
也用于计算属性。 也用于计算属性。

类型属性

类型属性是作为类型定义的一部分写在类型最外层的花括号({})内。

使用关键字 static 来定义值类型的类型属性,关键字 class 来为类定义类型属性。

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 值
   }
}

注意:
例子中的计算型类型属性是只读的,但也可以定义可读可写的计算型类型属性,跟实例计算属性的语法类似。


获取和设置类型属性的值

类似于实例的属性,类型属性的访问也是通过点运算符(.)来进行。但是,类型属性是通过类型本身来获取和设置,而不是通过实例。实例如下:

import Cocoa

struct StudMarks {
   static let markCount = 97
   static var totalCount = 0
   var InternalMarks: Int = 0 {
      didSet {
         if InternalMarks > StudMarks.markCount {
            InternalMarks = StudMarks.markCount
         }
         if InternalMarks > StudMarks.totalCount {
            StudMarks.totalCount = InternalMarks
         }
      }
   }
}

var stud1Mark1 = StudMarks()
var stud1Mark2 = StudMarks()

stud1Mark1.InternalMarks = 98
print(stud1Mark1.InternalMarks) 

stud1Mark2.InternalMarks = 87
print(stud1Mark2.InternalMarks)

以上程序执行输出结果为:

97
87
由JSRUN为你提供的Swift在线运行、在线编译工具
        JSRUN提供的Swift 在线运行,Swift 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。
yout