如何在 Swift 中使用具有隐式/强制展开的移位运算符
Posted
技术标签:
【中文标题】如何在 Swift 中使用具有隐式/强制展开的移位运算符【英文标题】:How to use shift operator with implicit/forced unwrapping in Swift 【发布时间】:2019-02-19 06:08:37 【问题描述】:我一直在尝试使用 shift 运算符并在一段代码中展开,因为我正在学习 Swift(仅供参考,只是一个初学者),所以我尝试了多种方法,但我被这个运算符卡住了。查看有关移位运算符的不同线程,我得出一个结论,我可能必须重载我的操作数,然后相应地使用它们。
我的一段代码:
var p : Int!
p = 24 >> 2;
if let msg = p print (msg);
else print("abcd");
请帮忙!如果我的想法正确与否,也会提出建议。
我想要实现的是两者可以一起工作..如果有任何适用的方式...... xD
【问题讨论】:
你为什么首先使用Int!
?你想做什么,你面临什么问题?
@RickyMo 我只是在尝试多种东西...正如我上面所说...因为我是这种语言的初学者...我试图找出多种东西,将来可能对我有用。根据您的问题...我想使用移位运算符和展开方法(无论是强制还是隐式)...其次..我面临的问题是..我正在尝试的代码段出错, “p = 24 >> 2; '>>' 不可用。”
那你在问什么?
@RickyMo 如果可能的话,我如何使用移位运算符和选项(具有展开功能)...
在使用它们之前,您应该始终解开任何可选变量。您的代码甚至不涉及可选内容。可选的Int
应表示为Int?
而不是Int!
。
【参考方案1】:
如果我正确理解了这个问题,这是一个误解,与同时使用可选选项和移位运算符没有任何关系
如果你想使用语法if let x = y
,那么只有当y
被声明为可选时才允许这样做,因为如果y
永远不会为nil,那么代码是没有意义的,因为你可以安全地直接使用y
。
当涉及到移位运算符时,据我所知,这两个值都不是可选的,所以你的例子有点做作。
var y: Int?
if someCondition
y = 42
if let x = y
doStuff(x)
else
print("y was never set")
或使用默认值展开
var y: Int?
let x = (y ?? 0) + 42
【讨论】:
所以你说我不能解开一个可选的...同时使用一些操作符...? 需要先以某种方式解包以上是关于如何在 Swift 中使用具有隐式/强制展开的移位运算符的主要内容,如果未能解决你的问题,请参考以下文章
在 Apple Swift 中,在啥情况下我不想要一个隐式展开的可选项?
在隐式展开可选值 AVAUDIO Player SWIFT 时意外发现 nil