所以我问了这个问题,看起来原因是
var num:Int! = 0
num++
之所以不起作用,是因为操作符采用了inout参数,而隐式取消包装的选项不是。然而,在
var num:Int! = 0
num = num + 1
操作符与隐式unwrapped选项一起工作,这意味着二进制操作符不需要inout参数。所以我的问题是,为什么一元运算符和二元运算符有不同的参数要求?对我来说,能够使用Int似乎有点傻
为什么一元运算符和二元运算符有不同的参数要求?
这不是一元对二元的问题。有一元运算符可用于Int 。例如:
var i: Int! = 17
var j = -i
-是一元运算符,它可以工作。问题又回到了inout的问题上。Int的前缀和后缀运算符不适用于
Int
输入输出要求类型完全匹配。
请注意,隐式展开选项仍然是选项。
var i: Int! = 17
var k = i // k has the type Int!
var m = i! // m has the type Int
因此,将隐式展开的可选变量作为需要非可选类型的inout变量传递是行不通的,因为inout变量需要与预期的类型和Int以及Int完全匹配
是两种截然不同的类型。变量必须显式展开,或者需要提供采用可选类型的重载函数。
使j成为Int而不是Int?”。若要正确执行,需要在给定Int时返回Int,然后返回Int
当它被赋予一个Int
。那么,重载函数需要什么呢。你可能会问,为什么斯威夫特不直接打开Int
都会修改变量并返回一个值。如果Swift打开了内码
并用Int调用,则返回类型为Int。然后你会有人在StackOverflow上问:“为什么VarI:Int!=17;VarJ=i
可以重载并为
Int!
制作前缀和后缀函数:
prefix func ++(inout x: Int!) -> Int! {
return ++x!
}
postfix func ++(inout x: Int!) -> Int! {
return x!++
}
var i: Int! = 17
var j = ++i
print("i = \(i), j = \(j)") // "i = 18, j = 18"
j = i++
print("i = \(i), j = \(j)") // "i = 19, j = 18"
至于为什么斯威夫特的设计师没有这样做,只有他们知道为什么。
问题内容: 为什么无法对隐式解包的可选变量进行突变? 这是一个重现问题的简短示例: 带整数 问题答案: 更新: Xcode Beta 5中的一个小警告已解决此问题: 该数组可以按预期工作,但是现在看来整数仍然需要显式拆包以允许使用 当前,这仅仅是Optionals的本质(无论是否隐式解包)。unwrap运算符返回一个不变的值。这可能是固定的,或者将来会提供更好的解决方案。 目前唯一的解决方法是将数
考虑这段代码: 这在Clang或GCC下不起作用,给我: 错误:不同指针类型“Foo*”和“Bar*”之间的条件表达式缺少强制转换Base*obj=!酒吧foo:bar; 这意味着要编译它,我必须将代码更改为: 既然存在到< code>Base*的隐式转换,那么是什么阻止了编译器这样做呢? 换句话说,为什么不使用强制转换,但使用操作员没有?是因为我不清楚我想使用部件吗?
在编写一个新的swift类时,当(不)使用隐式展开选项而不仅仅是普通选项时,我仍然不是100%舒服。据我所知,如果你从来没有期望它的值为零,那么把它指定为隐式未包装(可选)应该是可以的。如果为nil,则为异常事件,应导致运行时错误。 例如,这个简单的登录视图包含两个text field成员变量: 在上面的类中,emailField和passField都被归类为隐式展开选项,因为我从来没有期望它们在
请原谅我的无知,我恐怕错过了一些基本的选项理解。我的印象是(隐式展开的可选指示符)保证该类型的变量不为零。然而,这个非常简单的Apple API很少会返回我。 这是一个意外的错误还是Optionals规范的一部分?因为如果这是规范的一部分,我不明白为什么会有选项,而不是变量可以存在或。
问题内容: 我有以下代码 从2.2开始,我收到了折旧警告,有什么想法可以解决此问题? 我有这个解决方案: 但这不是很好。 问题答案: 怎么样: 看来您可能正在执行类似时钟算术的操作。如果是这样,那么可以更好地理解这一点:
主要内容:1. 算术运算符,2.比较运算符,3.逻辑运算符,4.按位运算符,4.分配运算符,5.范围运算符,6.其它运算符,7.运算符优先级运算符是一个符号,告诉编译器执行特定的数学或逻辑操作。 Swift内置运算符丰富,它提供以下类型的运算符 - 算术运算符 比较运算符 逻辑运算符 按位运算符 分配运算符 范围运算符 杂项运算符 本教程将逐一解释算术,关系,逻辑,按位,赋值和其他运算符。 1. 算术运算符 下表显示了Swift 4语言支持的所有算术运算符。 假设变量,变量,则 - 运算符 描述