小编Nic*_*ckH的帖子

为什么Objective-C API会隐式返回未包装的选项?

我对此感到困惑.如果我们把方法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时,是否真的只是为了节省人们使用或可选链接,还是更多?

interop objective-c optional ios swift

14
推荐指数
2
解决办法
2013
查看次数

Objective C时间戳

我发现了很多时间戳转换,它们都可以工作,但问题是,当我把代码放到日期的文本形式时,我总是提前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)

并获得正确的时间戳.

所以我在哪里弄乱.

objective-c unix-timestamp ios

9
推荐指数
1
解决办法
8674
查看次数

在iOS7上更新背景中的徽章图标

我有一个应用程序,我想每周更新徽章图标.我看到至少在iOS7之前,UILocalNotification只能将徽章图标设置为特定的数字

someLocalNotification.applicationIconBadgeNumber = 42;
Run Code Online (Sandbox Code Playgroud)

但我希望我的应用程序在后台加载,让我们说每个星期天,根据当前日期和某个开始日期之间的差异进行计算,并相应地更新徽章编号.

UILocalNotification显然无法做到这一点.它看起来像推送通知,但我没有这个应用程序的服务器组件,所以使用它作为一种解决方法是行不通的,我不确定Apple是否会喜欢它.

我知道iOS7中有一些后台应用刷新更新,但我不确定它们是否适用于这种情况.

TLDR:如何在iOS7中更新徽章图标,需要进行一些计算以获得正确的数字,每周(或任意长时间)?我想在没有服务器组件的情况下进行后台更新.

iphone objective-c scheduled-tasks background-process ios

5
推荐指数
1
解决办法
2382
查看次数

UITextfield UIDatePicker inputView很暗

我有一个UITextField需要表现出UIDatePickerUIToolbar上述关闭它.我设置UIDatePicker为文本字段inputView,然后设置UIToolbarinputAccessoryView.

这工作正常,但默认情况下我会得到奇怪的色彩效果.这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)

objective-c uitextfield uicolor ios ios7

5
推荐指数
0
解决办法
841
查看次数