- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
每当我的 View 通过以下方法加载时,我都在 Objective-C 的 .plist 中检索数据 -
@interface ListTableViewController ()
@end
@implementation ListTableViewController
NSArray *dict;
-(void)viewDidAppear:(BOOL)animated
{
NSString *arr= [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
arr=[arr stringByAppendingPathComponent:@"datalist.plist"];
if ([[NSFileManager defaultManager]fileExistsAtPath:arr])
{
dict=[NSArray arrayWithContentsOfFile:arr];
NSLog(@"%@",dict);
}
[self.tableView reloadData];
}
现在对于 Swift 我正在做同样的事情 -
class ListTableViewController: UITableViewController{
var arr = NSArray()
var plistfinalpath = String()
override func viewDidAppear(animated: Bool){
let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, .UserDomainMask, true)[0]
plistfinalpath = path.stringByAppendingString("/login.plist")
print(plistfinalpath)
print("time of appearing\(arr)")
arr = NSArray(contentsOfFile: plistfinalpath)!
self.tableView.reloadData()
}
}
但由于我必须解开 arr = NSArray(contentsOfFile: plistfinalpath)!
行中的值,当应用程序首次启动时 plist 为空时,数组为空,因为我正在打开它,它显示错误。那么我怎样才能实现我在 Objective-C 中所做的事情呢?
最佳答案
完整的答案涉及理解“可选”的概念。
在 Swift 中,您可以在类型后附加 ?
将变量声明为可选。当您这样做时,这意味着该变量可以保存一个值或根本不保存。当您将变量声明为非可选变量时,编译器会确保它始终保存一个值。
var myOptionalVariable: NSArray?
var myVariable = NSArray()
注意在非可选变量中,编译器强制我们给它一个值(在本例中只是一个空数组)。这是因为编译器允许当一个变量不是可选的时,它在每时每刻都有一个值。 注意区别:第一条语句只是声明变量为可选NSArray,第二条语句初始化和赋值一个新的空 NSArray 到变量。
随着可选值的引入,我们对变量中包含的数据的存在性有了编译时安全性。当不使用可选变量时,我们肯定知道变量始终保持一个值。同时,当使用可选变量时,我们不得不处理值可能不存在的情况,而不是默默地处理它(这就是目标中 nil
发生的情况-C)。从可选中提取值称为展开
要从可选变量中“提取”值,您需要将其解包。有几种方法可以解包一个可选的,给定 myOptional
是一个可选变量,这里有一些例子:
if let variable = myOptional {
// I can safely use variable here
}
甚至这个其他语法:
variable = myOptional ?? defaultNonOptionalValue
// I can safely use variable here
此外,您可以使用
进行强制解包variable = myOptional!
// crash incoming?
您使用这种方式进行解包,但实际上您是在对编译器说“相信我,我知道 myOptional
永远不会为 nil”你的情况不是真的,它会导致崩溃并出现错误 Fatal error: unwrappedly found nil while unwrapping an Optional values
。您应该始终避免强制解包,除非您真的非常确定您的数据。
您有 2 个可行的解决方案:
arr
转换为可选变量(通过以这种方式声明它:var arr: NSArray?
)然后处理(非强制)解包你使用它(即在你的 tableView 数据源方法中)哪个更适合你的情况,取决于 arr
的意思,如果可选的有意义,那就去做吧,否则,就让它不可选并分配一些默认值.
关于ios - 从 .plist 中检索的 Objective-C 样式在 Swift 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34154199/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!