首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

想要在swift中为SKSpriteNode添加一个布尔下标,这样我就可以开关它了吗?

在Swift中为SKSpriteNode添加一个布尔下标可以实现对其进行开关操作。下面是一个示例代码:

代码语言:txt
复制
import SpriteKit

extension SKSpriteNode {
    private struct AssociatedKeys {
        static var isToggledKey = "isToggled"
    }
    
    var isToggled: Bool {
        get {
            return objc_getAssociatedObject(self, &AssociatedKeys.isToggledKey) as? Bool ?? false
        }
        set {
            objc_setAssociatedObject(self, &AssociatedKeys.isToggledKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        }
    }
}

// 使用示例
let spriteNode = SKSpriteNode(color: .red, size: CGSize(width: 100, height: 100))
spriteNode.isToggled = true // 设置为开启状态
print(spriteNode.isToggled) // 输出 true

在上述代码中,我们通过使用Swift的扩展(extension)为SKSpriteNode类添加了一个名为isToggled的布尔下标。通过使用关联对象(objc_getAssociatedObject和objc_setAssociatedObject),我们可以为SKSpriteNode对象添加一个额外的属性来表示开关状态。

使用示例中,我们创建了一个SKSpriteNode对象spriteNode,并将其颜色设置为红色,大小为100x100。然后,我们将isToggled属性设置为true,表示开启状态。最后,我们打印出isToggled属性的值,结果为true。

这种方式可以方便地为SKSpriteNode对象添加开关功能,可以根据需要进行开启或关闭操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Swift教程(四)--集合类型

集合类型的可变性 如果你创建一个数组、集合或者一个字典,并且赋值给一个变量,那么创建的集合就是可变的。这意味着你随后可以通过添加、移除、或者改变集合的元素来改变(或者说异变)集合。...这样做可以允许 Swift 编译器优化你创建的集合的性能。 数组(arrays) 数组以有序的方式来储存相同类型的值。相同类型的值可以在数组的不同地方多次出现。...总之,由于 Swift 的类型推断,你不需要在使用包含相同类型值的数组字面量初始化集合的时候写集合的类型。 访问和修改集合 你可以通过集合的方法和属性来访问和修改集合。...字典类型简写语法 Swift 的字典类型写全了是这样的:Dictionary,其中的 Key是用来作为字典键的值类型, Value就是字典这些键储存的值的类型。...就像上边下标脚本的栗子, updateValue( :forKey:)方法会在键没有值的时候设置一个值,或者在键已经存在的时候更新

1.2K30
  • Swift 面向对象解析(二)

    就可以   具体的例子 Swift继承 4:防止重写  final 关键字可以用于修饰 类、属性、方法、下标。...与构造器相反的是,Swift 允许类(枚举,结构体不允许)定义析构器,在实例销毁之前,系统就会自动的调用该实例的析构器。         ...        5:添加下标         6:定义和使用新的嵌套类型         7:是一个已有类型遵守一个或者多个协议         顺便提一下拓展的创建方法,其实挺简单的,就是新建一个....Swift学习笔记(十一)--拓展和协议 Swift协议和扩展 六  协议: Swift 的协议的作用类似于 OC的协议,其实OC的协议你理解的话,这里也就没多少需要在强加去解释的。...协议的基本的用法以前的博客当中也有说过 Swift 2.2 协议和代理          顺便指出,可选协议这一点,其实也挺简单的,你在这些属性、方法、下标让它是可选的,让加上 optional

    97170

    生命系统-在临死前多次受伤

    我们需要一个将心形放在容器的功能。在Action Mark添加一个新函数并将其命名为:fillHearts。心形声明一个变量并设置其位置。然后,将心形添加到心形容器。...首先,在布尔分区声明一个新的布尔值,并将其命名为:isHit。将其值设置false。与接触陷阱的玩家类似,玩家一次会失去一个以上的心形,我们需要将接触限制为一个。...有很多方法可以实现无敌状态,但是到目前为止发现的最简单的方法是改变玩家的类别掩码。在lostHeart函数之后的Action Mark添加一个新函数并命名为:invincible。...将isStunned设置true并在玩家上应用闪烁。放一个计时器并将isStunned设置false。这样,玩家就不能连续多次被击晕。...结论 在本节,我们学习了生命系统的工作原理。我们在游戏中实现了心形,以及如何让玩家立于不败之地。这是一个非常重要的部分,希望你到目前为止真的很喜欢这个课程。

    75320

    SpriteKit动画小游戏

    这里简单说一下,游戏一般有横屏或者竖屏,这里只要在工程设定的General表情中进行勾选即可,这样游戏就可以强制为横屏或者竖屏。 ? ?...另一个_spinnyNode被创建未一个带圆角的正方形,并执行了两个Action,一个是1秒内旋转360度的重复动作,一个是消失的动作序列,并在点击的时候调用addchlid方法将这个节点加入到了场景...至此我们可以大致了解到了spritekit运行的一个大致框架:SpriteKit是基于Scene(场景)来组织的动画的,每个SKView(用来显示)可以渲染和管理一个SKScene,每个Scene可以装载多个...加入英雄Node 正如前所说Node是装载在Scene的,所以我们在刚在的didMoveToView添加我们heroNode。...2.Node的position是指该Node的中心位置,在设置位置时,这里注意Spritekit的坐标系和OPENGL的坐标系是一致的,都是屏幕左下角起始点(0,0)。

    5K50

    202 - Swift 的核心是什么?

    要回答这个问题,我们可以参考一下刚刚提到的面向对象编程,在面向对象编程里,是从一个 class 开始的,那要是照这样说,在面向协议编程里就是从一个 protocol 了吗这样解释对不对呢?...如今已经过去两年, struct 的数量应该更多了。既然 Swift 里用了这么多 struct,为什么我们不试试用 struct 呢?...我们前面也说过了 class 是面向对象里的东西,那我们试试用 struct,现在可以新建一个 struct,然后让遵守我们的 protocol 就可以了,之后就可以实例化一个 struct,接着就可以用...这样解释可能不太清楚,一个栗子。...当我自定义 UIView 的时候,让 view 从 xib 加载,那么就需要在每个类里都写一个从 xib 加载的类方法,如下代码: static func classMethodCreateView

    95720

    Swift 面向对象解析(一)

    Swift的类、结构体、枚举中都可以定义(属性、方法、下标、构造体、嵌套类型),下面我们一个一个的用小小的认识说一下它们,也会给大家一些看到的很不错的博客链接,方便大家更好的掌握,理解Swift...,其实按照我们最开始学的时候的方式去定义没问题,只是在官方的定义,OC和Swift都是上面例子的方式写枚举,这样写也有好处,有同行分析过了,链接这里。...Swift枚举和 C,OC 枚举的区别: Swift的枚举成员不会被分配一个默认的整数值,的枚举名本身就是一个枚举实例和整数值之间可没有任何的关系。...3 : 如果将存储属性的类型申明为可选类型,系统就可以将这些属性的初始值设置 nil (大家一定注意,Swift的nil和OC的nil完全不一样,Swift的nil是一个确定的值,叫缺失值,而OC的nil...我们在OC中经常会这样一个 property 属性,在.h声明了这个属性,在.m我们写的 set 或者 get 方法,然后在他们的 set 或者 get 方法里面做一些操作,看下面的这个例子:

    1.8K70

    Swift基础 集合类型

    这样做使您更容易对代码进行推理,并使Swift编译器能够优化您创建的集合的性能。 数组(Arrays) 数组将相同类型的值存储在有序列表。相同的值可以在不同位置多次出现在数组。...,在数组名称后立即传递要在方括号内检索的值的索引: var firstItem = shoppingList[0] // firstItem is equal to "Eggs" 注意 数组的第一个项目的索引为...因为这个特定的集合指定了一个值类型 String ,只允许存储 String 值。...您可以将新项目添加到带有下标语法的字典。...您还可以使用下标语法从字典检索特定键的值。由于可以请求一个不存在值的键,字典的下标返回字典值类型的可选值。如果字典包含请求键的值,则下标返回一个可选值,其中包含该键的现有值。

    10800

    Swift基础语法(常量变量、数据类型、元组、可选、断言)

    如果要添加类型标注,需要在常量或者变量名后面加上一个冒号和空格,然后加上类型名称。...这个例子给welcomeMessage变量添加了类型标注,表示这个变量可以存储String类型的值: var welcomeMessage: String 声明的冒号代表着“是...类型”,所以这行代码可以被理解...布尔Swift一个基本的布尔(Boolean)类型,叫做Bool。布尔值指逻辑上的(logical),因为它们只能是真或者假。...类似i == 1这样的比较,请参考基本操作符。 和 Swift 的其他类型安全的例子一样,这个方法可以避免错误并保证这块代码的意图总是清晰的。 元组 元组(tuples)把多个值组合成一个复合值。...来声明一个隐式解析可选。 当可选被第一次赋值之后就可以确定之后一直有值的时候,隐式解析可选非常有用。隐式解析可选主要被用在 Swift 类的构造过程,请参考类实例之间的循环强引用。

    2K90

    Swift基础语法(一)常量变量、注释、运算符、数据类型的认识

    可以不需要在编译的时候就有值,可以在运行时才有值 可以给常量赋值一个变量,此时必须先确定数据类型,以编译时开辟空间 在使用前必须赋值且只能赋值一次 2、变量 简单使用 //变量名:类型 //不限定数据类型...在使用前必须赋值且只能赋值一次 3、数据类型 在Swift对数据类型的划分有其特殊性,将所有的类型分为值类型和引用类型(指针类型) 数据类型.png 引用类型只有类类型 这里的枚举和结构体都属于值类型...结构体类型的非集合类型包括整型、布尔型、浮点型、字符串,集合类型包括Array、Set、Dictionary。.../删除元素 不能更改已经声明的元素名称 已声明的名称可以省略,但未声明名称的元组,不可添加名称: 简单使用 /* 元组的使用 */ //用下标来获取 print("The status code...MarkUp语法,如果平常写博客应该会很清楚,这样增加了注释的可读性 文档注释使用 /// 求和【概述】 /// /// 将两个整数相加【更详细的描述】 /// - Parameters: ///

    66840

    开心档之Swift基本语法

    如果创建的是 OS X playground 需要引入 Cocoa : import Cocoa /* 的第一个 Swift 程序 */ var myString = "Hello, World!"...---- 分号 与其它语言不同的是,Swift不要求在每行语句的结尾使用分号(;),但当你在同一行书写多条语句时,必须用分号隔开: import Cocoa /* 的第一个 Swift 程序 */ var...Unicode叫做统一编码制,包含了亚洲文字编码,如中文、日文、韩文等字符,甚至是我们在聊天工具中使用的表情符号 如果一定要使用关键字作为标识符,可以在关键字前后添加重音符号(`),例如: let `...只有这样写才不会报错: let a = 1 + 2; // 编码规范推荐使用这种写法 let b = 3+4 // 这样也是OK的 ---- Swift 字面量 所谓字面量,就是指像特定的数字,字符串或者是布尔这样...String = default) 如果我们让其不换行输出,只需要将最后一个参数赋值空字符串即可: for x in 0...10{ print("\(x) ", terminator: "

    90120

    Swift 数组(Arrays)

    相同的值可以多次出现在一个数组的不同位置。 数组的简单语法 写 Swift 数组应该遵循像Array这样的形式,其中Element是这个数组唯一允许存在的数据类型。...创建一个带有默认值的数组 Swift 的Array类型还提供一个可以创建特定大小并且所有数据都被默认的构造方法。...shoppingList的构造也可以这样写: var shoppingList = ["Eggs", "Milk"] 因为所有数组字面量的值都是相同的类型,Swift 可以推断出[String]是shoppingList...(这个数组有2个项) 使用布尔属性isEmpty作为一个缩写形式去检查count属性是否0: if shoppingList.isEmpty { print("The shopping list...这个方法把数组在特定索引值存储的数据项移除并且返回这个被移除的数据项(我们不需要的时候就可以无视): let mapleSyrup = shoppingList.remove(at: 0) // 索引值

    85610

    免费获取论文!荷兰19岁大学生开发SciHub轻松搞定

    您还困扰论文下载不了吗?今天这条消息对您来说就非常重要了。 将SciHub添加到论文网站,就可以轻松实现。 「很高兴看到它能帮助人们」,技术开发者Rick Wierenga说。...接下来,是Science学术网站的使用,添加SciHub链接后,点击「GET FREE ACEESS」就可以轻松获取论文。...Swift学生挑战赛是苹果全球开发者大会(Apple WWDC)的一部分,Swift学生挑战赛给了学生开发者一个机会,通过创建自己的Swift来表达他们对编程的热爱。...除了计算机之外,Rick还有着更大的科研梦想,「毕业后,研究世界上的重要问题,比如教育和医疗保健。」 他在博客这样写到:喜欢思考事物并深入理解它们。生物学、数学、计算机和哲学特别有趣。...Rick说:「不知道的状态会让很沮丧,但我接受我们还有很多的不知道这样的事实。」 他还认为,自己是一个理想主义者,在乎别人对的看法,但前提是他们是尊重的人。

    52520

    动手写个 JSON-Model Mapping 库

    Swift 在 JSON解析方面有个比较有名的第三方库——SwiftyJSON,之前也一直用的。...支持下标操作,但毕竟是以字符串键取值,IDE 不能自动补全,不仅麻烦还容易写错,而且用下标取到的值是JSON类型,一般还需要再进行类型转换,终究没有操作一个 Model 来得方便。...所以我一直一个 JSON-Model 的映射器,想要的效果是这样的: 定义一个 Model : class JSONModel { var error = "" var count...这简直无解,读了一下 SwiftyJSON 的源码希望能找点灵感,然后发现 SwfityJSON 的流程是这样的(以直接解析 NSData 数据例): 以一个 NSData 类型的数据作为构造器参数实例化一个...object是一个计算属性,在给它赋值时,会对的类型进行判断,然后把的类型信息存储到实例属性type(type是一个自定义的枚举类型,这个枚举类型基本对应了 Swift 的几种基本类型),最后把

    1.2K30

    Swift基础 基础知识

    编译代码时,尝试这样做将报告错误: 1. let languageName = "Swift" 2. languageName = "Swift++" 3. // This is a compile-time...分号(;) 与许多其他语言不同,Swift不要求您在代码的每个语句后编写分号(;),尽管如果您愿意,您可以这样做。...布尔值(Booleans) Swift一个基本的布尔类型,称为Bool。布尔值被称为逻辑值,因为它们只能是真或假。...一旦您确定可选内容确实包含一个值,您可以通过添加感叹号来访问其基础值(!)直到可选名称的末尾。感叹号有效地说:“知道这个可选肯定有价值;请使用它。”...您可以根据需要在单个if语句中包含尽可能多的可选绑定和布尔条件,并用逗号分隔。如果可选绑定的任何值nil,或者任何布尔条件计算false,则整个if语句的条件被视为false。

    15400

    Swift教程(三)--字符串和字符

    也就是说,如果你导入 Foundation ,就可以在 String 访问所有的 NSString 方法,无需转换格式。...初始化一个空字符串 var str1 = "" var str2:String="" var str3 = String() //通过检查布尔量 isEmpty属性来确认一个 String值是否空:...访问和修改字符串 你可以通过下标脚本语法或者自身的属性和方法来访问和修改字符串。 字符串索引 你可以使用下标脚本语法来访问 String索引的特定 Character。...在上面的例子, greeting 是一个字符串,也就是说它拥有一块内存保存着组成这个字符串的字符。由于 beginning 是 greeting 的子字符串,重用了 greeting 所用的内存。...,调用字符串的 hasPrefix(:)和 hasSuffix(:)方法,它们两个都会接受一个 String 类型的实际参数并且返回一个布尔量值。

    59720

    Swift的属性,方法,下标脚本以及继承

    大家好,又见面了,是全栈君 从这篇章节起,Swift编程语言指南大部分的重要内容在于概念,代码并非太多。...在Objective-C,我们总是无法改动结构体的子属性,可是swift却能够,只是这样的情况是个例外,当你存储型属性是个结构体而且是个常量,那你就不要再试图去改动这个结构体的子属性了。...变异(mutating) 普通情况下,值类型的属性不能在的实例方法中进行改动,引用也一样,假设要改动须要在方法前用mutatingkeyword进行修饰。...一个简单的样例: 这里我们通过下标能高速的訪问这个类实例持有的数据列表对应位置上的值,而不须要在訪问时每次都要写一次訪问其持有的数组在訪问对应的obj。...继承 在Swift,继承是区分”类”和其他类型的一个基本特征。 基类 不同于OC的NSObject,Swift的类并非从一个通用的基类继承而来的。

    87810
    领券