如何在 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

Swift 3:从“UIView”隐式强制表达的表达式?去任何

为啥 Swift 隐式展开可选的“nil”?

Swift:错误:在隐式展开可选值时意外发现 nil

如何在函数中指定参数在 Swift 中可以为零