ios - NSMutableArray 实例在 SWIFT 中默认是可选的吗?

标签 ios arrays swift nsmutablearray option-type

我一直在使用以下内容来执行我的 plist 并保存数据并在 TableView 中显示 plist 的内容。我正在使用 NSMutableArray 来获取数组的内容并将其显示在 TableView 中。 VC1 是我的表格 View ,VC2 是我的 EnterDetail VC 所以我声明了我的代码,如下 -

class ListTableViewController: UITableViewController
{
var arr = NSMutableArray()

    var plistfinalpath = String()

    override func viewDidLoad()
    {
        super.viewDidLoad()


    }


    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()

    }
    override func viewDidAppear(animated: Bool)
    {


            let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, .UserDomainMask, true)[0]
            plistfinalpath = path.stringByAppendingString("/login.plist")
            print(plistfinalpath)
        arr = (NSMutableArray(contentsOfFile: plistfinalpath))!
            print("time of appearing\(arr)")

       /* if let temparray = NSMutableArray(contentsOfFile: plistfinalpath)
        {
            arr = temparray
        }*/




        self.tableView.reloadData()

    }

如您所见,我已将“arr”声明为 NSMutableArray 类型,并且它不是可选的。当我在 didappear() 中使用时,编译器强制我强制解开它。为什么会这样,为什么即使我已将“arr”声明为非可选,也会发生这种情况?每当我第一次运行我的应用程序时,真正的问题就来了,plist 为空意味着“arr”也为空。由于我使用了强制解包,我的应用程序因 fatal error 而崩溃。如果我取消上面代码中的注释行(if let 部分)的注释,它就可以正常工作。所以有什么建议。谢谢。

最佳答案

你的 NSMutableArray 没有问题。

var arr = NSMutableArray()

创建数组的非可选实例。到目前为止,一切顺利......一个表达

NSMutableArray(contentsOfFile: plistfinalpath)

可以返回nil,因此它返回可选值。在这里,您尝试创建 NSMutableArray 的另一个实例并将结果分配给您的 var arr。

A mutable array containing the contents of the file specified aPath. Returns nil if the file can’t be opened or if the contents of the file can’t be parsed into a mutable array.

可能最适合您的方法是这样的

import Foundation
var arr = NSMutableArray(contentsOfFile: "somePath") ?? NSMutableArray()

如果文件尚不存在(或发生其他故障),则这里的变量保证具有默认值(NSMutableArray 的空实例)

关于ios - NSMutableArray 实例在 SWIFT 中默认是可选的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34171186/

相关文章:

ios - 以瀑布模式排列图像的最佳实践

ios - 在 App Store 中更改应用程序名称

ios - Swift 4 Unwind segue 不适用于导航 Controller

ios - 更改 View 的值及其图层的值

objective-c - 从 swift 调用 Objective-C 宏

ios - 有没有办法在 SwiftUI 中关闭没有动画的模态视图?

ios - 自定义来电屏幕,如 Truecaller IOS

javascript - 替换 VueJs 数组中的值

c - GCC 是如何实现变长数组的?

arrays - VHDL 中的多维信号数组