我对此感到困惑.如果我们把方法cellForRowAtIndexPath:中UITableView,例如,它的方法签名是:
func cellForRowAtIndexPath(_ indexPath: NSIndexPath!) -> UITableViewCell!
Run Code Online (Sandbox Code Playgroud)
它的返回值是:
表示表格单元格的对象,如果单元格不可见或者indexPath超出范围,则为nil.
这听起来是使用标准可选项的完美理由.事实上,由于Objective-C中的所有基于指针的类型都可以为nil ......似乎有意义的是所有Objective-C指针类型都应该作为标准选项导入.
我从WWDC的讲话中知道,他们说这是隐含的未解决的选项:
从Apple的使用Swift与Cocoa和Objective-C:
当您以这种可选类型访问该值而不首先安全地解包它时,隐式解包的可选项检查该值是否缺失.如果缺少该值,则会发生运行时错误.
所以,不是将可能的nil值作为可选项导入到Swift中,而是决定将其导入为一种状态,表明它永远不会是零...但可能是?听起来他们通过这样做完全否定了Swift for Objective-C API中可选类型的安全性.我似乎缺少什么?
而不是给出编译时错误或警告,他们认为运行时错误更好?这非常令人困惑.
考虑到似乎没有什么能回答我所看到的这个问题......我认为对于其他所有人来说,我只是没有看到,但是......为什么会这样?
if let当他们在Swift中使用Objective-C API时,是否真的只是为了节省人们使用或可选链接,还是更多?
我发现了很多时间戳转换,它们都可以工作,但问题是,当我把代码放到日期的文本形式时,我总是提前4个月出来.
这将拉动当前的一周,日期和时间.我这样设置因为我选择了DateTime Picker的日期.这只是我的viewDidLoad拉今天的日期.
NSDate *myDate = [[NSDate alloc] init];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"cccc, MMMM dd, YYYY, hh:mm aa"];
NSString *prettyVersion = [dateFormat stringFromDate:myDate];
date.text = prettyVersion;
Run Code Online (Sandbox Code Playgroud)
现在是时间戳转换,将prettyVersion转换为timeIntervalSince1970
NSDate *startdates = [dateFormat dateFromString:prettyVersion];
NSLog(@"Timestamp %0.0f",[startdates timeIntervalSince1970]);
Run Code Online (Sandbox Code Playgroud)
NSLog输出"Timestamp 1356317580",转换后是星期一,2012年12月24日02:53:00 GMT
现在我可以做到这一点
NSLog(@"Timestamp2 %0.0f",[myDate timeIntervalSince1970]);
Run Code Online (Sandbox Code Playgroud)
并获得正确的时间戳.
所以我在哪里弄乱.
我有一个应用程序,我想每周更新徽章图标.我看到至少在iOS7之前,UILocalNotification只能将徽章图标设置为特定的数字
someLocalNotification.applicationIconBadgeNumber = 42;
Run Code Online (Sandbox Code Playgroud)
但我希望我的应用程序在后台加载,让我们说每个星期天,根据当前日期和某个开始日期之间的差异进行计算,并相应地更新徽章编号.
UILocalNotification显然无法做到这一点.它看起来像推送通知,但我没有这个应用程序的服务器组件,所以使用它作为一种解决方法是行不通的,我不确定Apple是否会喜欢它.
我知道iOS7中有一些后台应用刷新更新,但我不确定它们是否适用于这种情况.
TLDR:如何在iOS7中更新徽章图标,需要进行一些计算以获得正确的数字,每周(或任意长时间)?我想在没有服务器组件的情况下进行后台更新.
我有一个UITextField需要表现出UIDatePicker与UIToolbar上述关闭它.我设置UIDatePicker为文本字段inputView,然后设置UIToolbar为inputAccessoryView.
这工作正常,但默认情况下我会得到奇怪的色彩效果.这inputAccessoryView是人们对iOS7的期望是半透明的,然而inputView它背后似乎有黑色背景,然后是半透明的.inputView当背景颜色设置为与背景颜色相同时,这会使它更加灰白inputAccessoryView.
这是我的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIDatePicker *datePicker = [[UIDatePicker alloc] init];
datePicker.backgroundColor = [UIColor clearColor];
[self.someTextField setInputView:datePicker];
UIToolbar *pickerToolbar = [[UIToolbar alloc] init];
pickerToolbar.backgroundColor = [UIColor clearColor];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:nil];
pickerToolbar.items = @[doneButton];
[pickerToolbar sizeToFit];
self.someTextField.inputAccessoryView = …Run Code Online (Sandbox Code Playgroud) ios ×4
objective-c ×4
interop ×1
ios7 ×1
iphone ×1
optional ×1
swift ×1
uicolor ×1
uitextfield ×1