对于在Swift2.2中替换C风格的循环感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解swift替换字符串,并且为您提供关于.toInt()在Swift2中删除?、15.8Swift闭包属
对于在Swift 2.2中替换C风格的循环感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解swift替换字符串,并且为您提供关于.toInt()在Swift 2中删除?、15.8 Swift闭包属性引起的循环强引用问题、15.9 Swift解决闭包引起的循环强引用问题、ios – Swift Eureka Form中的循环的宝贵知识。
本文目录一览:- 在Swift 2.2中替换C风格的循环(swift替换字符串)
- .toInt()在Swift 2中删除?
- 15.8 Swift闭包属性引起的循环强引用问题
- 15.9 Swift解决闭包引起的循环强引用问题
- ios – Swift Eureka Form中的循环
在Swift 2.2中替换C风格的循环(swift替换字符串)
Swift 2.2不推荐使用C风格的循环。但是在某些情况下,新的范围运算符可能无法正常工作。
for var i = 0; i < -1; ++i { ... }
和
for i in 0..<-1 { ... }
后者将在运行时失败。我可以if
用来包装循环,但有点混乱。有时,这种循环很有用。
有什么想法吗?
用例
- 您需要枚举数组中除最后一个元素之外的所有元素。
- 您需要枚举十进制范围内的所有整数,但范围可以是[0.5,0.9],因此没有整数(经过一些数学运算),这将导致空循环。
答案1
小编典典尽管它不是“漂亮”的,但您可以使用stride
:
for var i in 0.stride(to: -1, by: -1) { print(i)}
.toInt()在Swift 2中删除?
textField.text.toInt()
工作。现在Swift声明这是一个错误,并告诉我做
textField.text!.toInt()
并且它说没有toInt()和尝试使用Int()。这也不工作。刚刚发生了什么?
Int(myString)
在你的情况下,你可以使用int(textField.text!)insted的textField.text!.toInt()
Swift 1.x
let myString: String = "256" let myInt: Int? = myString.toInt()
Swift 2.x,3.x
let myString: String = "256" let myInt: Int? = Int(myString)
15.8 Swift闭包属性引起的循环强引用问题
/**
15.8-闭包属性引起的循环强引用问题
所谓的循环强引用,是指两个对象相互强引用指向对方。谁都不撒手,造成这两个对象都不会被系统所释放,造成内存泄漏。
那么怎么解决它呢?将其中一个对象变成弱引用指向对方,或者说持有对方。
weak uNowned 关键字来解决。
*/
var cr: CycleRef? = CycleRef.init() // 引用计数为1
// 我们知道延迟存储属性,第一次访问的时候才初始化。
cr!.closure() // 引用计数为 +1
cr = nil // 引用计数为-1
/**
我们可以看到如果不执行 cr!.closure() 的话,会打印出 deinit!,
那么执行了 cr!.closure(),产生了循环引用,没有打印出 deinit!
两个对象:闭包对象,cr指向的对象。
前提:闭包或者函数是引用数据类型。
*/
class CycleRef {
var a: Int = 9
lazy var closure: ()->Void = {
/**
默认闭包会对它访问的对象执行强引用。
这个地方访问了self ,导致调用 该闭包的时候引用计数+1
如果闭包属性中没有直接或者间接访问self,就不会产生循环强引用。
*/
print("a=\(self.a)")
print("Closure!")
}
deinit {
print("deinit!")
}
}
15.9 Swift解决闭包引起的循环强引用问题
/**
15.9-解决闭包引起的循环强引用问题
*/
var cr: CycleRef? = CycleRef.init() // 引用计数为1
// 我们知道延迟存储属性,第一次访问的时候才初始化。
cr!.closure() // 引用计数为 +1
cr = nil // 引用计数为-1
/**
我们可以看到如果不执行 cr!.closure() 的话,会打印出 deinit!,
那么执行了 cr!.closure(),产生了循环引用,没有打印出 deinit!
两个对象:闭包对象,cr指向的对象。
前提:闭包或者函数是引用数据类型。
*/
class CycleRef {
var a: Int = 9
/**
weak 和 uNowned不能修饰闭包,
那么如何解决闭包强引用呢?
系统有默认解决方法,
捕获列表
// 一般使用这个,uNowned修饰非可选类型,所以下面访问self不需要解包
[uNowned self] in
// 用weak 修饰可选类型, 所以下面访问self! 要解包
[weak self] in
*/
lazy var closure: ()->Void = {
/**
默认闭包会对它访问的对象执行强引用。
这个地方访问了self ,导致调用 该闭包的时候引用计数+1
如果闭包属性中没有直接或者间接访问self,就不会产生循环强引用。
*/
[uNowned self] in
print("a=\(self.a)")
// [weak self] in
// print("a=\(self!.a)")
print("Closure!")
}
deinit {
print("deinit!")
}
}
ios – Swift Eureka Form中的循环
我试图使用的代码是:
let itemNames = ["one","two","three"] // Eureka From Set-up form +++ Section("Select item values") for itemName in itemNames{ <<< StepperRow() { $0.tag = itemName $0.title = itemName $0.value = 0 } }
但是,当我这样做时,我在StepperRow行上出现了一个错误:
Unary operator cannot be separated from its operand
所以看起来Swift不再认为它在形式之内并且正在关注<符号小于,而不是行声明. 有关如何解决这个问题的任何想法?
解决方法
form +++ itemNames.reduce(Section("Select item values")) { (section,itemName) in section <<< StepperRow() { $0.tag = itemName $0.title = itemName $0.value = 0 } }
我们今天的关于在Swift 2.2中替换C风格的循环和swift替换字符串的分享就到这里,谢谢您的阅读,如果想了解更多关于.toInt()在Swift 2中删除?、15.8 Swift闭包属性引起的循环强引用问题、15.9 Swift解决闭包引起的循环强引用问题、ios – Swift Eureka Form中的循环的相关信息,可以在本站进行搜索。
本文标签: