按位运算符

~

1变0,0变1。

let initialBits: UInt8 = 0b00001111
let invertedBits = ~initialBits  // equals 11110000

$

全1得1,其他为0

let firstSixBits: UInt8 = 0b11111100
let lastSixBits: UInt8  = 0b00111111
let middleFourBits = firstSixBits & lastSixBits  // equals 00111100

|

有1得1,其他为0

let someBits: UInt8 = 0b10110010
let moreBits: UInt8 = 0b01011110
let combinedbits = someBits | moreBits  // equals 11111110

^

相异为1,相同为0

let firstBits: UInt8 = 0b00010100
let otherBits: UInt8 = 0b00000101
let outputBits = firstBits ^ otherBits  // equals 00010001

<<和>>

<<整体左移,右边填0;

>> 整体右移,左边填0。

<<和></p>>

let shiftBits: UInt8 = 4   // 00000100 in binary
shiftBits << 1             // 00001000
shiftBits << 2             // 00010000
shiftBits << 5             // 10000000
shiftBits << 6             // 00000000
shiftBits >> 2             // 00000001

算子函数

上面讲解的都是简单的运算符,下面的是为对象添加运算符,使之可计算。

符号在中间

struct Vector2D {
    var x = 0.0,y = 0.0
}

func + (left: Vector2D,right: Vector2D) -> Vector2D {
    return Vector2D(x: left.x + right.x,y: left.y + right.y)
}

let vector = Vector2D(x: 3.0,y: 1.0)
let anotherVector = Vector2D(x: 2.0,y: 4.0)
let combinedVector = vector + anotherVector
// combinedVector is a Vector2D instance with values of (5.0,5.0)

前缀和后缀

前缀关键字prefix
后缀关键字postfix

prefix func - (vector: Vector2D) -> Vector2D {
    return Vector2D(x: -vector.x,y: -vector.y)
}

let positive = Vector2D(x: 3.0,y: 4.0)
let negative = -positive
// negative is a Vector2D instance with values of (-3.0,-4.0)
let alsoPositive = -negative
// alsoPositive is a Vector2D instance with values of (3.0,4.0)

复合赋值运算符

这里用+=举例。

func += (inout left: Vector2D,right: Vector2D) {
    left = left + right
}

var original = Vector2D(x: 1.0,y: 2.0)
let vectorToAdd = Vector2D(x: 3.0,y: 4.0)
original += vectorToAdd
// original Now has values of (4.0,6.0)

其他

参考资料

The Swift Programming Language (Swift 2.1)

文档修改记录

时间 描述
2015-11-1 根据 The Swift Programming Language (Swift 2.1)中的Classes and Structures总结

版权所有:http://blog.csdn.net/y550918116j

Swift高级运算符(Advanced Operators)的更多相关文章

  1. 在编译时编译Xcode中的C类错误:stl vector

    我有一个C类,用gcc和可视化工作室中的寡妇在linux上编译.boid.h:并在boid.cpp中:但是,当我在Xcode中编译此代码时,我收到以下错误:有任何想法吗?我以为你可以使用C/C++代码并在Xcode中编译没有问题?.m文件被视为具有Objective-C扩展名的.c文件..mm文件被视为具有Objective-C扩展名的.cpp文件,那么它被称为Objective-C只需将.m文件重命名为.mm,右键单击或按住Ctrl键并在Xcode中的文件中选择重命名.

  2. swift2 运算符函数

    运算符函数前置或后置运算符函数前标注prefix或postfix组合赋值表达式比较运算符自定义运算符在自定义运算符中还可以设定自定义运算符的优先级和结合性,来处理更复杂的任务。

  3. Swift高级运算符(Advanced Operators)

    按位运算符~1变0,0变1。$全1得1,其他为0|有1得1,其他为0^相异为1,相同为0整体右移,左边填0。算子函数上面讲解的都是简单的运算符,下面的是为对象添加运算符,使之可计算。符号在中间前缀和后缀前缀关键字prefix后缀关键字postfix复合赋值运算符这里用+=举例。

  4. android – 在onRestoreInstanceState中发生ClassCastException

    ClassCastException随机发生以恢复onRestoreInstanceState()中的Vector.通常恢复向量很好,但有时会发生异常.我认为它发生在活动进入后台并被破坏但我不确定.有任何想法吗?谢谢.添加:我忘了附上异常日志.那是解决方法我使用下一个代码来恢复Vector:它会阻止java.lang.classCastException并保存元素顺序.要恢复Stack,您可以使用

  5. android – Build在debug中运行,在release中失败 – ZipException重复条目

    我正在将应用程序从2.3升级到Nougat(SDK25).当我添加com.android.support:appcompat-v7:25.0.0以支持ActivityCompat.requestPermissions时.当我在调试模式下运行它时,应用程序运行没有问题,但使用./gradlewassembleDebug运行会导致以下错误:当我在调试模式下运行时,应用程序构建没有问题,但是,当我尝试构

  6. 使用Android NDK和std :: vector修复Eclipse错误

    我正在使用eclipse开发一个也使用ndk的Android应用程序.我在我的应用程序中载入,我已经完成了必要的操作,让它们包含在内APP_STL:=stlport_static在我的Application.mk一切工作正常编译和运行,但是当我使用向量时,Eclipse会给我错误例如创建一个错误.如果我删除错误并继续进行编译并运行正常.我已经添加${NDKROOT}/sources/cxx-stl/gnu-libstdc/include在我的项目配置下,CGeneral–>路径和符号–>包括它解析#inc

  7. 是否可以将对象向量中的函数绑定到std::函数,或者如何以这种方式从对象向量中访问函数

    “主”配置成员之一是辅助配置对象的向量,用于覆盖主配置选项。我可以将“主”配置get方法绑定到函数,我将这些函数添加到向量中,并在测试中使用它们来获取这些参数我希望类似地绑定二级配置中的get方法,特别是向量中的最后一个方法,但我不确定如何做到这一点,或者这是否可能。我已经尝试了一些对我来说有意义的调整,但我开始怀疑这对于我正在创建的卷积量是否是一个好主意。

  8. C++在读取带有向量的结构时遇到问题&lt;字符串&gt;从二进制文件

    我正在做OOP的最后一个项目,其中一部分是制作一些数据库,我在这方面遇到了麻烦。每次创建Alquilerx时,都需要转到数据库的vector,然后将其存储在二进制文件中。问题是我可能管理的大小不对,因为一旦我添加了几个Alquiler,数组就会被垃圾填满,总是输出随机字符。这是代码,我试图尽可能地压缩它,只留下相关部分。如果有人想看一看,我会非常感谢。

  9. 将卡片插入一副卡片

    所以我有这个程序,我想实现一个insertvoid函数。基本上我想把一张卡片插入卡片组。输出应该是一副牌和洗牌版本,然后插入一张牌并再次排序。我怎样才能做到这一点?甲板.cpp甲板.h主.cpp现在我只编写了函数本身。

  10. ubuntu OpenMP parallel for

    要改成普通的int遍历。

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部