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

swift UserDefaults将nil返回为NSMutableArray

Swift中的UserDefaults是一个用于存储和获取用户偏好设置的工具。它是一个键值对存储系统,可以用来保存简单的数据类型,如字符串、整数、浮点数、布尔值等。

在UserDefaults中,当我们尝试获取一个不存在的键的值时,它会返回一个默认值,而不是nil。因此,如果我们尝试将nil返回为NSMutableArray,我们需要采取一些额外的步骤。

一种解决方案是使用可选类型。我们可以将NSMutableArray包装在一个可选类型中,这样就可以在UserDefaults中存储和获取它了。具体步骤如下:

  1. 存储NSMutableArray:
代码语言:txt
复制
let array: NSMutableArray? = nil
UserDefaults.standard.set(array, forKey: "myArray")
  1. 获取NSMutableArray:
代码语言:txt
复制
let array = UserDefaults.standard.object(forKey: "myArray") as? NSMutableArray

这样,我们就可以成功地将nil返回为NSMutableArray,并且能够正确地存储和获取它。

需要注意的是,NSUserDefaults在Swift 3中已经被重命名为UserDefaults,并且在Swift 4中引入了更多的类型安全性。因此,建议使用UserDefaults来代替NSUserDefaults。

关于UserDefaults的更多信息和用法,可以参考腾讯云的相关文档:

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

相关·内容

UserDefaults 浅析及其使用管理

根据传入的 suiteName的不同会产生四种情况: 传入 nil:跟使用UserDefaults.standard效果相同; 传入 bundle id:无效,返回 nil; 传入 App Groups...{ get } /// 获取Data值,默认值空 var dataValue: Data { get } // MARK: - 不存在nil /// 获取Bool值...UserDefaults.standard.removeObject(forKey: key) } } 上述协议主要是UserDefaults的数据存取操作在协议中定义出来,并给出了协议默认方法实现...@propertyWrapper Swift 5.1 推出了 SwiftUI 量身定做的@propertyWrapper关键字,翻译过来就是属性包装器,有点类似 java 中的元注解,它的推出其实可以简化很多属性的存储操作...当存储值不存在时返回的默认值 public init(_ key: String, defaultValue: T, userDefaults: UserDefaults = UserDefaults.standard

1.1K10
  • Swift 中的属性包装器

    在这种情况下,Swift 5.1的属性包装器功能非常有用,因为它使我们能够将此类行为和逻辑直接附加到属性本身上,这通常代码重用和归纳开辟了新的机会。...我们所要做的就是defaultValue属性添加到包装器中,然后在底层UserDefaults存储不包含属性键的值时使用它。...} 然而,还有一件事我们需要考虑,因为我们现在可以nil分配给UserDefaultsBacked属性。...为了避免在这种情况下发生崩溃,我们必须更新属性包装,首先检查是否有任何赋值nil,然后再继续将其存储在当前UserDefaults实例中,如下所示: // 因为我们的属性包装器的值类型不是可选的,但是...// 仍然可以包含`nil`值,我们必须引入这个 // 使我们能够任何赋值转换为类型的协议 // 我们可以与`nil`相比: private protocol AnyOptional { var

    2.7K30

    iOS 多国语言本地化与App内语言切换(Swift)写在前面前言准备工作storyboardxib本地化纯代码本地化语言切换后记

    勾选语言,把几种全部勾上,包括Base (下文使用脚本生成代码做准备) 参考此篇文章进行脚本添加 iOS中多语言本地化流程的优化 ? 添加脚本 脚本执行移动到编译上方 ?...文件路径(根据个人习惯修改) localizedFile="${SRCROOT}/${PROJECT_NAME}/Source/Utils/LocalizedUtils.swift" # localizable.strings...= nil else { return nil } return languageBundle!...} } 其中Userdefault自定义了下标 public subscript(key: String) -> Any?...文件路径(根据个人习惯修改) localizedFile="${SRCROOT}/Public/LocalizedUtils.swift" # localizable.strings中的文本转为swift

    2.4K31

    用OC和Swift一起说说二叉树

    二叉树的第i层至多有2^{i-1}个结点;深度k的二叉树至多有2^k-1个结点;对任何一棵二叉树T,如果其终端结点数n_0,度2的结点数n_2,则n_0=n_2+1。    ...三:一棵深度k,且有2^k-1个节点称之为满二叉树;深度k,有n个节点的二叉树,当且仅当其每一个节点都与深度k的满二叉树中,序号为1至n的节点对应时,称之为完全二叉树。    ...,你要调用多次的话,第一个保存的值也就是最后一个返回的了 这就解释了为什么每次最后的返回值都是 最原始的根节点了!...,返回1 三:都存在,再递归获取深度,返回最大值!...RootNode) { return 0; } NSMutableArray * queeArray = [NSMutableArray array];

    53250

    用OC和Swift一起说说二叉树

    二叉树的第i层至多有2^{i-1}个结点;深度k的二叉树至多有2^k-1个结点;对任何一棵二叉树T,如果其终端结点数n_0,度2的结点数n_2,则n_0=n_2+1。    ...三:一棵深度k,且有2^k-1个节点称之为满二叉树;深度k,有n个节点的二叉树,当且仅当其每一个节点都与深度k的满二叉树中,序号为1至n的节点对应时,称之为完全二叉树。    ...,你要调用多次的话,第一个保存的值也就是最后一个返回的了 这就解释了为什么每次最后的返回值都是 最原始的根节点了!...,返回1 三:都存在,再递归获取深度,返回最大值!...RootNode) { return 0; } NSMutableArray * queeArray = [NSMutableArray array];

    75350

    使用Codable归档Swift对象

    当使用这样的数据时,Swift我们提供了一个很棒的协议,称为Codable:一种专门用于存档和取消存档数据的协议,这是一种“将对象转换为纯文本然后再次转换”的奇特方式。...我们将在未来的项目中更多地研究Codable,但是目前我们的需求很简单:我们想要归档一个自定义类型,以便可以将其放入UserDefaults中,然后在从UserDefaults返回时将其取消存档。...将自动我们生成一些代码,这些代码根据需要为我们存档和取消存档User实例,但是我们仍然需要告诉Swift何时存档以及如何处理数据。...当我们返回另一种方式时(当我们拥有JSON数据并且想要将其转换为Swift Codable类型时),我们应该使用JSONDecoder而不是JSONEncoder,但是过程大致相同。...这使我们进入了项目概述的末尾,因此继续进行,您的项目重置其初始状态,以便进行构建。

    2.1K30

    Swift Codable 任意类型解析想要的类型

    在使用 OC 的时候,我们常用的方法将其解析 NSString 类型,使用的时候再进行转换,可是当使用 Swift 的 Codabel 时我们不能直接做到这样。...参照第一种方法,我们先写一个任意类型转换成 String? 的方法: // 用于解决不知道服务器返回什么类型。。。。...都转换为 String 然后保证正常解析 // 当前支持 Double Int String // 其他类型会解析成 nil // /// String Int Double 解析 String...wrappedValue = string } } 这里面可以无限套娃,比如如果是这个字段返回的是字典,你可以字典解析出来处理成字符串~~~ 此时 User 写成: struct User:...} 同理我们可以写一个 ZYInt, 来任意类型转换为 Int 如果确实无法转换,我们可以控制其为nil 或者直接等于 0,这样我们就可以保证不管怎么样,我们的解析不会失败。

    2K40

    使用 Codable 归档 Swift 对象

    当使用这样的数据时,Swift我们提供了一个很棒的协议,称为Codable:一种专门用于存档和取消存档数据的协议,这是一种“将对象转换为纯文本然后再次转换”的奇特方式。...我们将在未来的项目中更多地研究Codable,但是目前我们的需求很简单:我们想要归档一个自定义类型,以便可以将其放入UserDefaults中,然后在从UserDefaults返回时将其取消存档。...将自动我们生成一些代码,这些代码根据需要为我们存档和取消存档User实例,但是我们仍然需要告诉Swift何时存档以及如何处理数据。...当我们返回另一种方式时(当我们拥有JSON数据并且想要将其转换为Swift Codable类型时),我们应该使用JSONDecoder而不是JSONEncoder,但是过程大致相同。...这使我们进入了项目概述的末尾,因此继续进行,您的项目重置其初始状态,以便进行构建。

    1.2K20

    开关组件对比

    这种情况下,做法是启动的时候调用服务端的接口,在返回的接口数据中存储对应的值,使用时直接获取存储的值。...比如: // 启动时 ApiManager().request(apiName, parameter: parameters, callBack: { (data) in // 存储服务端返回的值...通过Swift protocol定义了ToggleType和TogglesDataStoreType两个协议,并定义两个方法,判断开关是否打开、以及更新开关状态 // TogglesDataStoreType.swift...BuildTargetTogglesDataStore继承自TogglesDatatStoreType,并对外暴露单例对象,内部init设置对应的值,同时实现isToggleOn:方法,update:方法里面空...协议,且实现协议的两个方法 CioPOWBZrCOACNxtAAKd2755Bx0933.png CioPOWBYURiAff7BAALmppeDy9I518.png 最后,用本地开关例子

    95611

    Objective—C语言的新魅力——Nullability、泛型集合与类型延拓

    在OC中,以前是没有这样的功能的,因此我们在开发中会经常遇到因为某个函数应该返回实例而返回了空导致的崩溃。...,get方法不可返回nil 一点提示: 你可以发现,iOS9的SDK中已经完全兼容使用了这些特性,并且nonnull的使用会比nullable广泛的多,因此,系统提供了这样一对宏: #define NS_ASSUME_NONNULL_BEGIN...在我们向这个数组中追加元素的时候,编译器元素的类型提示了出来,并且FromArray方法中需要的元素类型也提示了出来。...可以看到,字典键值的类型编译器我们提示了出来,结合上面类型通配符的使用,对于多参的集合,参数类型用“,”隔开即可。...五、结语          虽然这些优点在swift中早有体现,但就我个人而言,我对OC的感情会更深一些,也更加愿意接受OC的改变和成长,大家都说swift的趋势势在必行,我只想说,swift很优秀,OC

    1K30

    应用程序内购买教程:入门

    image Pietro Rea中级·文章·30分钟 更新说明:Pietro ReaXcode 10,Swift 4.2和iOS 11/12更新了本教程。Ray Wenderlich写了原文。...如果您删除并重新安装该应用程序,“ 还原”按钮恢复以前购买的任何RazeFaces。 前往Xcode快速查看代码。主视图控制器位于MasterViewController.swift中。...= nil productsRequestCompletionHandler = nil } } 此扩展用于通过实现SKProductsRequestDelegate协议所需的两种方法从Apple...在IAPHelper.swift中,return语句 替换isProductPurchased(_:) 以下内容: return purchasedProductIdentifiers.contains...例如,如果父级控件设置禁止它,则会发生这种情况。Apple要求优雅地处理这种情况。不这样做可能会导致应用拒绝。 再次打开IAPHelper.swift

    5.5K20
    领券