我为什么僵持? – (void)foo { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ [self foo]; }); // whatever… } 我希望foo在第一次通话时被执行两次。
我正进入(状态 yld: Symbol not found: _OBJC_CLASS_$_UIUserNotificationSettings 这里是当应用程序在iOS7设备上运行时导致错误的function,甚至在代码中甚至没有调用该函数。 func reigsterForRemoteUserNotifications(notificationTypes: UIUserNotificationType, categories: NSSet) { let userNotificationSettings = UIUserNotificationSettings(forTypes: notificationTypes, categories: categories) (UIApplication.sharedApplication()).registerUserNotificationSettings(userNotificationSettings) UIApplication.sharedApplication().registerForRemoteNotifications() } 在iOS7设备上运行时,我不希望这个方法可以被访问。 我不想在它内部进行select检查,因为这意味着该方法可用于开始。 我想要的是一个build立configuration参数来检查版本:我不能找出一种方法来编写一个快速的等效的预处理器macros来检查正确的iOS版本,忽视新的和未声明的iOS 8库函数。 #if giOS8OrGreater // declare the functions that are iOS 8 specific #else // declare the functions that are iOS 7 specific #endif 在文档中,苹果build议函数和generics来代替复杂的macros,但在这种情况下,我需要一个构buildconfiguration预编译检查来避免处理未声明的函数。 有什么build议么。
我正在尝试在我的Swift项目中使用第三方的Objective-C库。 我已经成功地将库导入到了Xcode中,并且创build了一个<Project>-Bridging-Header.h文件,允许我在Swift中使用Objective-C类。 我似乎遇到了一个问题:Objective-C代码包含一个带有macros#define AD_SIZE CGSizeMake(320, 50)的macros的Constants.h文件。 将Constants.h导入我的<Project>-Bridging-Header.h不会导致我的Swift应用程序可以使用的全局常量AD_SIZE 。 我做了一些研究,看到“复杂的macros”下面的苹果文档说 “在Swift中,可以使用函数和generics来获得与复杂macros相同的结果,而不会有任何妥协。 因此,C和Objective-C源文件中的复杂macros不能用于Swift代码。“ 读完之后,通过在Swift中指定let AD_SIZE = CGSizeMake(320, 50) ,我可以很好地工作,但是如果这些值在我不知情的情况下改变,我想保持与库的未来兼容性。 有没有一个简单的解决这个在Swift或我的桥接头? 如果没有,是否有办法replaceConstants.h的#define AD_SIZE CGSizeMake(320, 50) ,并保持与使用旧的AD_SIZEmacros的现有Objective-C应用程序向后兼容?
我试图将这个Obj-C代码转换为Swift代码,但我不知道这个代码的等价物应该是什么? #define DEGREES_TO_RADIANS(degrees)((M_PI * degrees)/180) 我Googlesearch,发现这一点 但我不明白如何在我的情况下在Swift中转换?