使用 for in 循环使类可迭代?

2024-02-11

我有一个自定义类:

class MyArrayClass {
...
}

该类是一个自定义列表实现。

我想做以下事情:

var arr:MyArrayClass = MyArrayClass()
arr.append("first")
arr.append("second")
arr.append("third")

for entry in arr {
  println("entry: \(entry)")
}

编辑:我想要使其可迭代的类是Java 实用程序 ArrayList https://gist.github.com/steffimueller/b48d64303f2579b86a5a它使用这个类IOS对象数组 https://gist.github.com/steffimueller/4df7775bc455a60e2148.

我的类必须确认哪个协议才能在 for in 循环中工作?


你应该看看this https://robots.thoughtbot.com/swift-sequences关于这个主题的博客文章。不过我会在这里写一个总结:

当你写:

// mySequence is a type that conforms to the SequenceType protocol.
for x in mySequence {
    // iterations here
}

Swift 将其转换为:

var __g: Generator = mySequence.generate()
while let x = __g.next() {
    // iterations here
}

因此,为了能够枚举您的自定义类型,您需要使您的类实现SequenceType协议也是如此。看着SequenceType下面的协议,您可以看到您只需要实现一个方法,该方法返回符合以下协议的对象GeneratorType协议 (GeneratorType博客文章中有介绍)。

protocol SequenceType : _Sequence_Type {
    typealias Generator : GeneratorType
    func generate() -> Generator
}

这是如何制作的示例MyArrayClass可用于for loop:

class MyArrayClass {
    var array: [String] = []

    func append(str: String) {
        array.append(str)
    }
}

extension MyArrayClass : SequenceType {
    // IndexingGenerator conforms to the GeneratorType protocol.
    func generate() -> IndexingGenerator<Array<String>> {
        // Because Array already conforms to SequenceType,
        // you can just return the Generator created by your array.
        return array.generate()
    }
}

现在在实践中使用它:

let arr = MyArrayClass()
arr.append("first")
arr.append("second")
arr.append("third")

for x in arr {
    println(x)
}

// Prints:
//     First
//     Second
//     Third

我希望这能回答你的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 for in 循环使类可迭代? 的相关文章

  • 检查 UITableViewCell 是否完全可见

    如何检查 UITableViewCell 在屏幕上是否完全可见 不被选项卡或导航栏切断 我可以使用以下代码获取可见单元格 NSArray indexes tableView indexPathsForVisibleRows 但我想排除屏幕中
  • Itunes Connect 测试飞行公共链接有效性

    苹果最近为试飞版本启用了公共链接功能 我们可以与任何人共享此链接 他可以使用此公共链接安装应用程序 此公共链接背后的构建有效期为 90 天 我的问题是 与用户共享公共链接后 我们可以增加构建的到期时间吗 这样公共链接的有效性就会增加 我们不
  • UIView 框架更改时阴影层不调整大小

    问题图像截图 https i stack imgur com cyc5o png class ViewController UIViewController var shadow UIView override func viewDidLo
  • 如何使用 PKAddPassButton 创建“添加到苹果钱包”按钮以进行本地化通行证

    在我的 iOS 项目中 我有一个屏幕 允许用户创建苹果通行证并将其添加到钱包中 Apple 建议使用 PKAddPassButton 创建 添加到苹果钱包 按钮 当我尝试使用以下代码创建苹果通行证时 let passButton PKAdd
  • 如何将 4 个字节转换为 Swift 浮点数?

    我正在用 Swift 编写一个 MsgPack 解析器作为学习该语言的一种方式 感觉不太适合这项任务 但我一直在进步 现在我遇到了一个块 我似乎无法说服它将 4 个字节转换为浮点数 var bytes Array
  • TestFlight iOS 应用程序 get-task-allow 问题

    我在 ios 的 testflight 中有一个名为 MapItTrackIt 的应用程序 一切都进展顺利 我刚刚更新到 xcode 5 1 我按照以往的方式构建了该应用程序 相同的配置文件和临时证书 这次 当我尝试上传 IPA 文件时 我
  • Swift 2 OAuth2 LinkedIn 连接

    我将使用 Swift 2 和 Xcode 7 制作一个本机 iOS 应用程序 用户应该使用 LinkedIn 和 OAuth 2 登录 但我想知道应该如何开始设置 我对 OAuth 2 没有太多经验 有好的教程或示例应用程序吗 我看到了雷
  • iPad应用程序必须支持横向和纵向吗?

    iPad 应用程序是否必须支持纵向和横向才能被 App Store 接受 编辑 我的应用程序是一个商业应用程序 销售亚马逊等产品 您必须至少支持一种方向的两种类型 纵向和纵向颠倒和 或横向左 右 会尽快拉起链接 http developer
  • 我可以通过 PresentFeedDialogModallyWithSession 传递给 FBWebDialogs 的完整合法参数集是什么

    我查看了 Facebook 上的示例代码 这里 https developers facebook com docs howtos feed dialog using ios sdk https developers facebook co
  • 无法在 iOS UIWebView 中加载完整的 Facebook 评论插件

    我有一个简单的ViewController在 UIWebView 中加载 FB 评论插件 implementation ViewController void viewDidLoad super viewDidLoad UIWebView
  • 在应用程序中全局关闭自动更正

    我想在 iPad 应用程序中禁用文本输入自动更正 无论设备上自动更正的全局设置是什么 有没有一种好的方法可以通过 API 执行此操作 或者我只需要浏览整个应用程序 找到所有文本输入字段 然后单独关闭每个字段的选项 抱歉 您必须检查所有文本字
  • 由于没有系统应用程序而终止

    这个错误让我发疯 我有一个按钮 我想移动到视图控制器 如果我将其设置为初始视图控制器 我可以打开该视图控制器 但现在我通过单击按钮来调用它 视图控制器包含一个自定义视图 我在绘制矩形上放置了一个断点 当绘制矩形完成时 模拟器终止 我在屏幕上
  • 在启用滚动的情况下扩展堆栈视图内的 UITextView

    我正在尝试使用自动布局和 Stackview 来实现一些目标 我有一个垂直 Stackview 其中包含 UIView UITextView 和 UIView 如下所示 我已经在这里查看了以前的答案 但找不到一个干净的解决方案来实现此目的
  • 在 UICollectionView 下面插入子视图

    当我在 UICollectionView 下方添加子视图时 有时子视图会显示在 UICollectionView 单元格上方 这是子视图插入代码 self collectionView insertSubview self garmentV
  • 如何使用 Swift Package Manager 将 SwiftLint 与 iOS 应用程序集成?

    我正在使用 Xcode 11 beta 5 创建一个新的 iOS 应用程序 并且我想使用 Swift Package Manager 而不是 CocoaPods 来管理依赖项 使用 SwiftLint 和 CocoaPods 时的常见模式是
  • 沙盒测试帐户反复询问 iOS 应用内购买的密码

    我用 Swift 语言开发了一个应用程序 我添加了应用内购买来删除广告 我还创建了一个沙箱帐户来测试 但后来我忘记了这个账户的信息 我不确定信息 密码输入屏幕仍然以闪烁的屏幕显示方式显示 即使我重置设备并重新加载它 也没有任何好处 实际上一
  • Swift UINavigationController 子类中的强制 init 覆盖

    我目前正在子类化UINavigationController对于服务视图控制器流的框架 在某种程度上 就像UIImagePickerController do 这是我的实现示例 尽可能简单 可以在操场上运行 import UIKit pub
  • 停止在 iOS Web 应用程序上滚动屏幕边缘?

    正在开发 iOS 网络应用程序 用户可以上下滚动页面内容 但是 有没有办法阻止屏幕被拖动得太远以致灰色背景变得可见 这可以通过在移动 Safari 中打开任何网页并将页面下拉来复制 您可以使用诸如 Pastrykit 或 iScroll 之
  • 如何为移动应用程序创建无密码登录

    我有兴趣在移动应用程序和 API 之间构建某种无密码登录 假设我可以控制两者 动机是必须登录对用户来说非常烦人并且存在安全风险 例如 用户将重复使用现有密码 我希望用户能够立即开始使用该应用程序 我想知道是否有一些可行的技术 例如 在移动设
  • ios Facebook 添加 FBNativeAdView 作为子视图

    我想使用预建视图FBNativeAdView 不想自定义 FBNative 广告 如link https developers facebook com docs reference ios current class FBNativeAd

随机推荐

  • 内容安全策略 (CSP):如果使用元标记,是否可以以某种方式报告违规行为?

    在玩了相当长一段时间后 我仍在寻找解决方案 某个网站的内容安全策略需要一长串允许的来源 特别是因为 Google 使用动态 TLD 加载某些内容 Google 在文档中还指出这对于某些服务是必要的 https developers goog
  • 使垂直菜单高度适合 100%

    我画了一张草图https i stack imgur com NiSi8 jpg https i stack imgur com NiSi8 jpg所以侧边栏必须与内容侧边栏一起一直向下拖动 它的高度应该是 100 以及它的所有父级 div
  • 为什么 tailwind 不覆盖本地定义的样式?

    我正在尝试通过 tailwindcss 麦粒肿更改文本的默认颜色 但我不明白为什么它不起作用 但 Bootstrap 确实会覆盖默认样式 我是 tailwindcss 的新手 有人能告诉我这里发生了什么事吗 在这里您可以在codesandb
  • 检查 QFont 是 Serif 还是 Sans-Serif

    我有一个由用户选择的 QFont QFont font QFontDialog getFont ok prevFont this 我如何知道它是否是衬线字体 这有效吗 bool isSansSerrif font styleHint QFo
  • Java 中的时间对象是什么?

    我在探索TemporalQuery http docs oracle com javase 8 docs api java time temporal TemporalQuery html and TemporalAccessor http
  • 如何在 Eclipse 中运行 Java 9 主类而不编辑启动配置?

    我在 Eclipse Oxygen 1a Release 4 7 1a 的 Maven 项目中创建了一个简单的 Hello World 主类和一个 module info java 文件 运行在 Java 9 0 1 上 当我尝试右键单击启
  • 如何将mysql数据库中的表导出到excel?

    我在 mysql 中有一个表 该表非常大 有超过 100k 行 我想将其导出到 Excel 但是 我尝试了 phpmyadmin 上的导出到 excel 功能 但转储 excel 文件需要很长时间 这甚至不是倾销 错误始终是 连接已重置 有
  • 是否有基于终端及其祖先映射递归数据类型的名称?

    假设我有一个如下所示的类型 data Term a Terminal a Application Term a Term a Abstraction String Term a 现在 我想绘制地图Term a to Term b 理想情况下
  • 如何在 Emacs 中检查 Python 代码的语法而不实际执行它?

    Python 的 IDLE 有 检查模块 Alt X 来检查语法 无需运行代码即可调用该语法 在 Emacs 中是否有等效的方法来执行此操作 而不是运行和执行代码 python m py compile script py
  • Java N/IO 中的行分隔符?

    使用以下命令写入 txt 文件时如何插入新行java nio file 以下代码生成一个只有一行的txt文件ABCDEF 而不是两条单独的线ABC and DEF public static void main String args th
  • Python Spark从数据框中提取字符

    我在 Spark 中有一个数据框 如下所示 ID Column 1 STRINGOFLETTERS 2 SOMEOTHERCHARACTERS 3 ANOTHERSTRING 4 EXAMPLEEXAMPLE 我想做的是从列中提取前 5 个
  • 通过虚拟盒提供的 ember-cli 违反了内容安全策略

    我有一个新鲜的ember cli v 0 1 2应用 我在虚拟框中提供 ember 并通过仅主机配置的网络适配器从主机访问网页 地址为192 168 56 102 当我跑步时ember serve从虚拟盒子中访问192 168 56 102
  • Grabwidget 即使放大也能获取完整视图

    我在用QPixmap QPixmap grabWidget QWidget widget int x 0 int y 0 int width 1 int height 1 抓住视口QPixmap object 在某些情况下 即使屏幕放大到一
  • 为什么如果类的成员是引用,则复制对象是非法的?

    我遇到一个测验 指出下面第 18 行中的代码格式不正确 因为 当需要复制的成员之一是引用时 使用隐式定义的赋值运算符是格式不正确的 我无法理解这一点 为什么无法复制引用 为什么16号线是合法的 第 16 行与第 18 行非常相似 复制构造函
  • Socket.io 中的身份验证

    我将尝试验证 socket io 上的连接 目前 用户首先通过 REST API 进行身份验证 然后 我向用户发送JsonWebToken与经过身份验证的用户的用户名 打开客户端和服务器之间的连接后 我的计划是暂时从已连接套接字列表中删除该
  • GEKKO:不响应约束也不求解 obj 函数

    以下是与这个问题相关的内容 使用 Gekko 的 MPC 和 ARX 模型 https stackoverflow com questions 63727310 mpc with arx model using gekko 63731362
  • WPF 中的多行组合框

    我试图找到 WPF 的多行用户可编辑组合框的示例 我们已经使用自定义模板尝试了各种方法 但无法使其工作 我们试图解决的具体问题是在下拉列表中显示地址列表 用户可以同时输入新地址 在组合框中输入内容没有问题 但多行却让我们丧命 如果我们想在
  • 如何绘制不在道路上的路线,MKMapView

    所以我一直在尝试使用 MKMapView 和叠加层来创建 不在道路上的道路 这可能听起来很奇怪 但我想做的是 在我的 iOS 应用程序中 我想绘制特定酒店提供的短途旅行路线 但是到目前为止我发现的所有帖子都集中在现有道路上 因为短途旅行会经
  • “外部 IP 地址”和“公共 IP 地址”这两个术语是同义词吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 外部IP地址与公共IP地址以及内部I
  • 使用 for in 循环使类可迭代?

    我有一个自定义类 class MyArrayClass 该类是一个自定义列表实现 我想做以下事情 var arr MyArrayClass MyArrayClass arr append first arr append second ar