在Swift中,如何避免可选项和零对象引用?

可选项的全部原因是防止由于命中分配给nil / null / none的variables导致运行时崩溃。 因此,variables不能为零; 相反,它们可以被包装在一个可选types中,表示它们为Some或None,并解包以获得Some或者nil的特定内容。 但是如果你把它们全部解开包装! ,或隐式解包选项,你只是介绍的可能性,因为你是一个不完善的编码器,运行时崩溃。 如果你使用if let来安全地打开它们,你可以避免崩溃,但是你被困在if let语句的范围内来处理some里面的值,你仍然需要处理潜在的nil情况。 如果你使用? 为了调用方法暂时解包,在完成时会被重新包装,引入了多层分层可选包装的混乱可能性。 所以:在我看来,要做的事情是避免可选项(除非需要时)(例如调用返回它们的框架方法)。 但是,如果我不使用可选项,这意味着我的对象引用必须是非零,我不知道如何处理的情况下,出于某种原因,不应该是或不是,一个分配给对象引用的值。 我的问题是:我如何避免需要零? 这似乎需要一个不同的编程方法。 (或者我应该只使用可选项,如果这就是我正在做的事情,那么和简单地将对象引用赋值为null一样,它怎么样呢? 我知道这可能是一个主观的问题,但我应该问这个问题呢? 我并没有试图挑起或激起辩论,我真的想知道正确的方法是什么,因为我写了更多的Swift代码。

强制链接打开移动Safari浏览器从一个Web应用程序与JavaScript

在iOS Web应用程序中调用window.open()时,将在Web应用程序中打开页面,而不是移动Safari。 如何强制网页在移动Safari浏览器打开? 注意:使用直接的<a href>链接不是一个选项。

导航栏rightbaritem图像button错误的iOS 11

此代码在ios10中正常工作。 我得到我的标签和一个图像button,这是用户的照片configuration文件,圆形圆….好吧。 但是当运行xcode 9 ios11模拟器时,我把它拉长了。 button框架必须是32×32,当检查模拟和获取视图,并告诉xcode描述视图我得到的输出为170×32或类似的东西。 inheritance我的代码。 let labelbutton = UIButton( type: .system) labelbutton.addTarget(self, action:#selector(self.toLogin(_:)), for: .touchUpInside) labelbutton.setTitleColor(UIColor.white, for: .normal) labelbutton.contentHorizontalAlignment = .right labelbutton.titleLabel?.font = UIFont.systemFont(ofSize: 18.00) let button = UIButton(type: .custom) button.addTarget(self, action:#selector(self.toLogin(_:)), for: .touchUpInside) button.frame = CGRect(x: 0, y: 0, width: 32, height: 32) button.setTitleColor(UIColor.white, for: .normal) button.setTitleColor(UIColor.white, for: .highlighted) var buttomItem : […]

UILocalNotification自定义闹钟重复间隔(太阳,星期一,星期三,星期四,星期五,星期五,星期六)

我使用UILocalNotification作为报警目的。 我有一个自定义选项重复基于平日(太阳,星期一,星期二,星期四,星期五,星期五,星期六)。 这么多的应用程序完成了这个过 我最好地尝试了我的水平。 但是我无法让它工作。 请你们帮我….

如何获得触摸的像素颜色?

我知道这是一个常见的问题,这个问题有很多答案。 我用过这个。 虽然其中许多是相同的。 可悲的是我没有一个人为我工作。 以下代码我使用到现在。 -(void)getRGBAsFromImage:(UIImage*)image atX:(int)xx andY:(int)yy { // First get the image into your data buffer CGImageRef imageRef = [image CGImage]; NSUInteger width = CGImageGetWidth(imageRef); NSUInteger height = CGImageGetHeight(imageRef); CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); unsigned char *rawData = (unsigned char*) calloc(height * width * 4, sizeof(unsigned char)); NSUInteger bytesPerPixel = 4; NSUInteger bytesPerRow = […]

检测在tableview中按下的uibutton:Swift最佳实践

我有一个表格中的可变数目的单元格代表学生对应于他们的特定教师。 他们是一个自定义的单元格,带有一个button,触发一个新的VC的继续,提供关于其单元格的学生的详细信息。 我的问题是: 快速识别哪个button被按下的最佳做法是什么? 一旦我知道索引path,我可以确定哪些学生的信息需要传递给下一个VC。 在后面的文章中有一个很好的答案,但是我不知道如何翻译成Swift。 任何帮助将非常感激。 检测在UITableView中按下了哪个UIButton

代码更新后,启用iOS 8的设备不会收到PUSH通知

我最近升级了我的一个testingiPhone到iOS 8,然后升级了PUSH注册码如下(使用xCode 6) -(BOOL)hasNotificationsEnabled { NSString *iOSversion = [[UIDevice currentDevice] systemVersion]; NSString *prefix = [[iOSversion componentsSeparatedByString:@"."] firstObject]; float versionVal = [prefix floatValue]; if (versionVal >= 8) { NSLog(@"%@", [[UIApplication sharedApplication] currentUserNotificationSettings]); //The output of this log shows that the app is registered for PUSH so should receive them if ([[UIApplication sharedApplication] currentUserNotificationSettings].types != UIUserNotificationTypeNone) { […]

数据input自定义视图的Swift示例(自定义应用程序内键盘)

目标 我想制作一个只在我的应用程序中使用的自定义键盘,而不是需要安装的系统键盘。 我已阅读和尝试 文档 应用程序扩展编程指南:自定义键盘 数据input的自定义视图 上面的第一篇文章指出: 确保一个自定义的系统范围的键盘确实是你想要开发的。 要为您的应用程序提供完全自定义的键盘,或仅在您的应用程序中使用自定义键来补充系统键盘,iOS SDK提供了其他更好的选项。 在iOS的文本编程指南中阅读自定义input视图和input用于数据input的自定义视图中的附件视图。 这就是我所说的第二篇文章。 不过,那篇文章没有足够的细节让我开始。 教程 iOS 8:在Swift中创build自定义键盘 如何使用Swift在iOS 8中制作自定义键盘 Xcode 6教程:iOS 8.0 Swift中简单的自定义键盘 使用iOS 8应用程序扩展创build自定义键盘 我可以从上面的列表中的第二个教程中获得一个可用的键盘。 但是,我找不到任何教程展示了如何在数据input自定义视图文档中描述如何在应用程序中使用键盘。 堆栈溢出 我在回答当前问题的途中也问了(并回答了)这些问题。 如何使用应用内自定义键盘的buttoninput文本 代表在Swift中 题 有没有人有一个最小的例子(甚至一个button)的应用程序自定义键盘? 我不是在寻找一个完整的教程,只是一个我可以自己展开的概念certificate。

在iPhone模拟器上testingCoreLocation

更新:从iOS 5和Xcode 4.1开始,现在可以在模拟器中testing位置,甚至定义路线。 有关更多详细信息,请参阅http://developer.apple.com 。 遗留问题 有没有在iPhone模拟器上testingCoreLocation? 我所需要的是能够自己设置位置,并使CoreLocation返回它。

UITapGestureRecognizer – 让它在接触下工作,而不是接触?

我使用tap事件的时间非常敏感,所以我很好奇,如果可以在用户简单触摸的时候激活UITapGestureRecognizer,而不是要求他们触摸起来。