我有这个for-in循环:
for button in view.subviews {
}
现在,我希望将按钮强制转换为自定义类,以便可以使用其属性。
我尝试了这个: for button in view.subviews as AClass
但是它不起作用,给我一个错误:'AClass' does not conform to protocol 'SequenceType'
我尝试了这个: for button:AClass in view.subviews
但是,这也不起作用。
对于 Swift 2 和更高版本:
Swift 2 在 for 循环中添加了 大小写模式 ,这使得在 for 循环中进行类型转换更加容易和安全:
for case let button as AClass in view.subviews {
// do something with button
}
为什么这比您在 Swift 1.2 和更早版本中可以做的更好?因为 案例模式
允许您从集合中选择特定类型。它仅与您要查找的类型匹配,因此,如果数组包含混合,则只能对特定类型进行操作。
例如:
let array: [Any] = [1, 1.2, "Hello", true, [1, 2, 3], "World!"]
for case let str as String in array {
print(str)
}
输出:
Hello World!
对于 Swift 1.2 :
在这种情况下,您正在转换view.subviews
而不是button
,因此您需要将其转换为所需类型的数组:
for button in view.subviews as! [AClass] {
// do something with button
}
注意:如果基础数组类型不是[AClass]
,则将崩溃。那就是!
on as!
告诉你的。如果不确定类型,可以使用条件转换as?
和可选绑定if let
:
if let subviews = view.subviews as? [AClass] {
// If we get here, then subviews is of type [AClass]
for button in subviews {
// do something with button
}
}
对于 Swift 1.1 和更早版本:
for button in view.subviews as [AClass] {
// do something with button
}
注意:如果子视图的类型不是全部,这也会崩溃AClass
。上面列出的安全方法也适用于早期版本的Swift。
for ... in循环用于循环对象的属性。 以下是'for ... in'循环的语法。 for (variablename in object) { statement or block to execute } 在每次迭代中,来自对象的一个属性被分配给变量名称,并且此循环继续,直到对象的所有属性都用完为止。 例子 (Example) var obj = {a:1, b:2,
for ... in循环用于循环对象的属性。 以下是'for ... in'循环的语法。 for (variablename in object){ statement or block to execute } 在每次迭代中,来自对象的一个属性被分配给变量名称,并且此循环继续,直到对象的所有属性都用完为止。 例子 (Example) void main() { var
和 in 操作符一样,for in 循环同样在查找对象属性时遍历原型链上的所有属性。 注意: for in 循环不会遍历那些 enumerable 设置为 false 的属性;比如数组的 length 属性。 // 修改 Object.prototype Object.prototype.bar = 1; var foo = {moo: 2}; for(var i in foo) { c
Swift 循环 Swift for-in 循环用于遍历一个集合里面的所有元素,例如由数字表示的区间、数组中的元素、字符串中的字符。 语法 Swift for-in 循环的语法格式如下: for index in var { 循环体 } 流程图: 实例 1 import Cocoa for index in 1...5 { print("\(index) 乘于 5 为:\(i
问题内容: 我在Javascript中遇到了奇怪的行为。我懂了 “对象不支持此属性或方法” 以下代码中的函数异常: 当我使用以下代码更改代码时,问题消失了: inside的值是多少? 问题答案: 不要用于数组迭代。 重要的是要了解,用于访问索引的Javascript数组的方括号语法()实际上是从… 继承的。 该结构不能像其他语言(php,python等)中所看到的那样更传统。 Javascript
问题内容: 我在这里看到了答案,这些答案解释了如何告诉编译器循环中数组是某种类型的。 但是,Swift是否提供一种方法,使循环仅循环遍历数组中指定类型的项,而不崩溃或根本不执行循环? 问题答案: 您可以将for循环与case-pattern一起使用: 这将仅对数组中类型(或可以强制转换为)的那些项执行循环体。