首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Swift:编写将从数组中调用随机项的代码,而不会再次调用该项

Swift是一种流行的编程语言,用于开发iOS、macOS、watchOS和tvOS应用程序。下面是一个示例代码,用于从数组中随机选择一个项,而不会再次选择该项:

代码语言:txt
复制
var array = [1, 2, 3, 4, 5]

func getRandomItem(from array: inout [Int]) -> Int? {
    guard !array.isEmpty else {
        return nil
    }
    
    let randomIndex = Int.random(in: 0..<array.count)
    let randomItem = array[randomIndex]
    array.remove(at: randomIndex)
    
    return randomItem
}

let randomItem = getRandomItem(from: &array)
print(randomItem)

这段代码首先定义了一个整数类型的数组array,然后定义了一个函数getRandomItem,该函数接受一个数组作为参数,并返回一个随机选择的项。函数内部使用guard语句来检查数组是否为空,如果为空,则返回nil。接下来,使用Int.random(in: 0..<array.count)生成一个随机索引,然后使用该索引从数组中获取随机项,并将其从数组中移除。最后,返回随机项。

这段代码可以用于各种场景,例如在游戏中随机选择敌人出现的位置,或者在应用程序中随机展示广告等。

腾讯云提供了多种云计算相关产品,其中包括云服务器、云数据库、云存储等。您可以访问腾讯云官方网站(https://cloud.tencent.com/)了解更多关于这些产品的信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

在 Xcode 添加 Swift package 依赖

Xcode带有内置依赖管理器,称为 Swift Package Manager(SPM)。您可以告诉 Xcode 在线存储某些代码URL,然后它将为您下载。...您甚至可以告诉它要下载版本,这意味着如果将来将来某个时间更改远程代码,则可以确保它不会破坏您现有代码。 为了尝试这一点,我创建了一个简单Swift包,您可以将其导入任何项目。...这为Swift Sequence类型(Array,Set,Dictionary甚至是range都符合)添加了一个小扩展,它可以同时提取许多随机。...在Swift这只需要一行代码,因为序列具有map()方法,通过将函数应用于每个元素,我们可以将一种类型数组转换为另一种类型数组。...在我们例子,我们希望从每个整数初始化一个新字符串,因此我们可以将String.init用作要调用函数。

6.6K10

AVKit框架详细解析(四) —— 基于AVKit 和 AVFoundation框架视频流App构建

首先,导航到 VideoFeedView.swift 并在 SwiftUI 导入正下方添加以下导入: import AVKit 看看下面这个,你会看到你已经有了一个列表和一个视频数组。...Implementing the Actual Looping Apple 编写了一个漂亮新类,称为 AVPlayerLooper。 此类将采用单播放器项目并处理循环播放该项目所需所有逻辑。...由于您将从该结构体外部控制播放,因此您可以从 LoopingPlayerUIView 初始值设定删除这两行: player?.volume = 0.0 player?....如果你反过来做,双击监听器将永远不会调用再次构建并运行,您将能够点击和双击来播放剪辑速度和音量。 这表明添加自定义控件以与自定义视频视图交互是多么容易。...AVAudioSession.sharedInstance().setCategory(.playback) } 在初始化程序,确保调用此方法不是旧方法: init() { setVideoPlaybackCategory

6.9K10
  • 使用 Swift Package 插件生成代码

    这个脚本将完全用 Swift 编写,因为这是我最熟悉语言,并承担以下职责: 扫描目标目录并提取所有.swift文件。目标将被递归扫描,以确保不会错过子目录。...如下所示脚本导入必要依赖,并创建可执行文件入口点(必须用@main装饰),并声明在执行时传递4个输入。 所有逻辑和方法调用都存在于run函数,该函数是调用可执行文件时运行方法。...对于上次调用中找到每个文件,通过SourceKitten发出Structure请求,以查找文件Swift代码类型信息。...这是最棘手部分,这些需要指向正在测试目标的来源,不是插件正在应用于目标——单元测试。谢天谢地,插件目标依赖是可访问,我们可以从该数组获取我们感兴趣依赖。...此依赖将是内部(target不是product),它将为可执行文件提供其名称和目录。

    2.2K20

    Swift基础 嵌套

    闭包表达式提供了几种语法优化,用于以缩短形式编写闭包,不会失去清晰度或意图。...例如,SwiftArray类型有一个map(_:)方法,该方法以闭包表达式为单个参数。为数组每个项目调用一次闭包,并返回该项目的替代映射值(可能是其他类型)。...您通过在传递给map(_:)闭包编写代码来指定映射性质和返回值类型。 将提供闭包应用于每个数组元素后,map(_:)方法返回一个包含所有新映射值数组,顺序与原始数组相应值相同。...print(customersInLine.count) // Prints "4" 即使闭包内代码删除了customersInLine数组第一个元素,但在实际调用闭包之前,数组元素也不会被删除。...如果从未调用闭包,则永远不会计算闭包内表达式,这意味着永远不会删除数组元素。

    12500

    谷歌为何要养苹果亲儿子Swift?原来意在可微分编程

    大部分程序员都不会选择这么做,要么是因为他们没有编写低层高性能代码经验,要么则是因为在 Python 开发环境与某个低层语言环境之间来回切换会变得过于麻烦。...这通常不会有问题,因为 PyTorch 对此很智能,它会等到用户交互操作所依赖所有异步调用都结束之后才会转让控制权。...此外,就算在 CUDA 环境编写整个网络,性能也可能并不会得到太多提升,因为大卷积占据了大部分推理时间,大卷积又已经有了经过良好优化代码实现。但情况并非总是如此。...这段 Swift 代码并没使用动态数组,因此当数组规模变大时,它会在内存堆不断重新分配位置。这也意味着它会在每个附加(append)数组上执行边界检查。为了佐证这一点,我们来看看相关定义。...其想法是让开发者可在 Swift 代码编写 Python 代码;通过这种方式,数量庞大 Python 软件库就能为 Swift 所用了。

    1.4K40

    架构之路 (七) —— iOS AppSOLID原则(一)

    ---- Invoking the Single Responsibility Principle 再次打开 AppMain.swift 并查看代码。...previews,使用预览 PersistenceController.previewItem 不是您从 AppMain 删除: ExpenseItemView(expenseItem:...这意味着当您从Today添加费用时,除非您创建新报表实例,否则您不会在每月Monthly中看到它。 断言确保您不会在子类覆盖此方法,并且不会意外调用父方法。...相反,SOLID 为您提供了一些指导方针,帮助您以更有条理方式编写代码。 它使修复bug更安全,因为您对象不会纠缠在一起。编写单元测试更容易。即使将您代码从一个项目重用到另一个项目也毫不费力。...另一个可以改善您编写应用程序方式有趣概念是Defensive Programming。 这是关于让您代码预测可能会出错地方,这样您应用程序就不会脆弱,并且在收到意外输入时不会崩溃。

    4.7K10

    如何结合 Core Data 和 SwiftUI

    这描述了您数据模型,该数据模型实际上是类及其属性列表。 AppDelegate.swift 和 SceneDelegate.swift 现在有用于设置 Core Data 额外代码。...这将告诉 Core Data 创建学生并保存他们所需一切,因此请回到 ContentView.swift,以便我们编写一些代码。...从那里开始,我们可以像常规 Swift 数组一样开始使用学生,但是您会发现有一个陷阱。...这是一个引发函数调用,因为理论上它可能会失败。实际上,我们所做一切都没有失败可能,因此我们可以使用try?来调用它——–我们不在乎捕获错误。 因此,请将最后一行添加到按钮操作: try?...这是该项目概述最后一部分,因此,请将您代码重设为初始状态,并确保您从我们数据模型删除了Student实体——我们不再需要它。

    11.8K30

    SwiftUI:WeSplit项目 计算每个人金额

    tipPercentage整数在tipPercentages数组存储索引,不是实际tip百分比。...所以,我们将创建一个新计算属性totalPerPerson,它将是一个Double,它将从上面的三个值开始。...per person here: let peopleCount = Double(numberOfPeople + 2) 您会注意到,将结果值转换为Double,这样我们就可以将所有内容相加并将其除以,不会失去准确性...接下来我们需要计算出实际小费百分比。我们tipPercentage属性存储用户选择值,但实际上这只是tipPercentages数组一个索引。...现在,如果您还记得这实际上是一个字符串,因为它被用作对文本输入框双向绑定。尽管我们编写代码只显示十进制键盘,但没有什么可以阻止创造性用户在其中输入无效值,因此我们需要小心处理。

    1.6K20

    Apple 营收有望再创新高 | Swift 周报 issue 47

    当然,可能已经有一些方法可以通过属性包装器或其他方式在 swift 实现弱数组。 然而,要在 swift 轻松完成此操作语法可能需要在添加之前进行一些修改。...5) 讨论来自镜像主题数组构造函数?内容大概该提案建议在 Swift 数组类型引入一个新初始值设定,允许从镜像主题创建它。...为了解决这些问题,作者建议允许从镜像主题初始化数组。 它们为数组类型扩展提供了一个代码片段,该代码片段利用镜像类型来启用此初始化。...概述好处包括鼓励将元组转换为数组以供长期使用,提供对 Collection 和 Array 方法访问,改进使用数组不是元组函数参数传递,以及限制异构元组转换。...文档自动生成 API 调用和服务器实现所需代码

    13232

    Swift基础 并发性

    并行代码意味着多个代码同时运行——例如,一台配备四核处理器计算机可以同时运行四条代码,每个核心执行其中一任务。...本章其余部分使用并发一词来指代异步和并行代码常见组合。 注意 如果您以前编写过并发代码,您可能习惯于处理线程。Swift 并发模型构建在线程之上,但您不会直接与它们交互。...Swift异步函数可以放弃它正在运行线程,这允许另一个异步函数在第一个函数被阻止时在该线程上运行。 虽然可以在不使用Swift语言支持情况下编写并发代码,但该代码往往更难阅读。...如果有足够系统资源可用,它们可以同时运行。这些函数调用都没有标记为await,因为代码不会暂停等待函数结果。...在这种情况下,在其他地方运行代码会读取错误信息,因为它对行为者访问在update(with:)调用交织在一起,数据暂时无效。

    16000

    Swift基础 通用

    您可以编写避免重复代码,并以清晰、抽象方式表达其意图。 通用是Swift最强大功能之一,Swift标准库大部分都是用通用代码构建。...如果您需要在自己代码中使用swapTwoValues(_:_:)函数行为,您可以使用Swift现有的swapswap(_:_:)函数,不是提供自己实现。...本节向您展示了如何编写名为Stack通用集合类型。堆栈是一组有序值,类似于数组,但与SwiftArray类型相比,操作集更受限。数组允许在数组任何位置插入和删除新项目。...请注意,此函数返回类型仍然是Int?,因为该函数返回可选索引号,不是数组可选值。...向关联类型添加约束 您可以向协议关联类型添加类型约束,以要求符合这些约束类型满足这些约束。例如,以下代码定义了一个Container版本,要求容器是可等

    10400

    Swift 5.6到5.10新特性整理

    你必须将此作为宏依赖添加 使用宏步骤: 创建一个执行宏展开代码。 在一个单独模块创建一个符合 CompilerPlugin 协议结构,导出你宏。...在你 Package.swift 文件添加宏模块。 在你主目标声明宏。 使用宏。 使用宏: 允许创建复杂且动态代码转换。 可以提高开发效率,因为你可以避免编写重复或复杂手动代码。...UserDefaults 值随着每次点击改变,但以这种方式使用 @AppStorage 不会导致每次 tapCount 更改时 body 属性被重新调用——我们 UI 不会自动更新以反映更改。...存在类参数可以可选使用 SE-0375扩展了 Swift 5.7 功能,该功能允许我们使用协议调用泛型函数,从而修复了一个小但令人讨厌不一致之处:Swift 5.7 不允许对可选类型使用此行为,...在我们混合数组情况下,我们可以编写这样代码: for item in tvShow { if let item = item as?

    1.9K10

    Swift入门:类

    这在结构体很好,因为Swift会自动为我们生成一个成员初始化器,强制我们为这两个属性提供值,但这不会在类中发生,因此Swift无法确定它们是否会被给定值。...有三种解决方案: 1、使这两个值成为可选字符串; 2、为它们提供默认值; 3、编写自己初始化器。 第一个选项很笨拙,因为它在我们代码引入了不需要选项。...它还允许Swift检查你代码:如果你不使用override Swift不允许你更改从你超类得到方法,或者如果你使用override没有任何东西可以重写,Swift会指出你错误。...对于类,对象每个副本都指向同一个原始对象,因此如果更改一个,它们都会更改。Swift调用结构体“值类型”,因为它们只指向一个值,类“引用类型”,因为对象只是对实际值共享引用。...您可以将它们传递到函数,或者将它们存储在数组,在其中进行修改,并且它们不会在引用它们其他位置发生更改。

    74010

    Swift基础 集合类型

    这样做使您更容易对代码进行推理,并使Swift编译器能够优化您创建集合性能。 数组(Arrays) 数组将相同类型值存储在有序列表。相同值可以在不同位置多次出现在数组。...由于Swift类型推断,如果您使用包含相同类型值数组文字初始化数组,则不必编写数组类型。...shoppingList初始化可以以较短形式编写: var shoppingList = ["Eggs", "Milk"] 由于数组文字所有值都是相同类型,Swift可以推断[String]是用于...您可以通过调用数组append(_:)方法将新添加到数组末尾: shoppingList.append("Flour") // shoppingList now contains 3 items,...eggs" 如果你想从数组删除最后一,使用’ removeLast() ‘方法,不是’ remove(at:) ‘方法,以避免需要查询数组’ count ‘属性。

    10500

    在Python执行二分查找

    标签:Python,二分查找 本文将展示二分查找算法工作原理,并提供完整示例代码,帮助你在Python执行自己二分查找。...算法将开始在以下数组查找15: nums = [4,9,15,21] 这说明了为什么必须对列表或数组进行排序重要性。二分查找将再次找到一个新中间索引,即索引1。索引1处为9。...在当前中间索引15处再次查找该项,结果匹配,返回其索引2。 如果开始索引大于结束索引,但在每次迭代期间在中间索引处未找到该项,则意味着该项不存在于该数组。...开始索引将从0开始,结束索引将是列表或数组中最后一索引,例如,在前面的示例为9,中间索引将是:开始索引+(结束索引-开始索引)//2。 2.在中间索引处查找该项目。...例如,下面的脚本实现了一个名为bin_search()函数,该函数接受输入数组和要在数组查找。如果找到该项,则该函数返回该项索引。否则,该函数将返回None。

    2.4K40

    Swift 6 时代来临了!苹果:它是超越 C++ 最佳选择

    该项目用于从命令行管理 Swift 工具链,提供类似 Rust rustup 体验。...但在 Swift 6 之后,这条警告将不再出现:Swift 现在能够正确检测到代码实际上并无问题,因为用户不会同时从两个或更多位置进行访问。编译器可以分析程序流程并意识到这种编写方式安全可行。...Swift 6 启用另一原有变更为 SE-0412,要求全局变量在并发环境必须是安全。...举例来说,Swift 6 新 count(where:) 方法接受一个闭包,用于评估有多少个与当前运行任何类型过滤器相匹配。...message.read() } createMessage() 在这部分代码,编译器会强制要求 message.read() 只能被调用一次,因为它会消耗掉指定对象。

    18410

    汇编和栈

    通过桥接标头 Registers-Bridging-Header.h,Swift 可以使用此函数,因此您可以从 Swift 调用以汇编方式编写此方法。 现在利用这一点。...通过源代码查看函数将显示 AT&T 汇编 (因为它是用 AT&T ASM 编写)。...然后将 RDX 设置为 0x0,然后将从堆栈 pop 值存储回 RDX 寄存器。 请确保您在心里很好地理解这个函数中发生了什么,因为接下来您将研究 LLDB 寄存器。...再次输入 si 和 dumpreg: 基本指针从堆栈 pop,并重新分配回它进入该函数时原始值。 调用规则指定 RBP 在函数调用之间应保持一致。...再次输入 si 和 dumpreg: 返回地址从堆栈 pop 并设置为 RIP 寄存器; 您知道这一点,因为您已经回到了调用该函数位置。

    3.5K20
    领券