我们可以在Objective-C中声明如下所示的块.
typedef void (^CompletionBlock) (NSString* completionReason);
Run Code Online (Sandbox Code Playgroud)
我试图在swift中做到这一点,它给出了错误.
func completionFunction(NSString* completionReason){ }
typealias CompletionBlock = completionFunction
Run Code Online (Sandbox Code Playgroud)
错误:使用未声明的'completionFunction'
定义:
var completion: CompletionBlock = { }
Run Code Online (Sandbox Code Playgroud)
这该怎么做?
更新:
根据@ jtbandes的回答,我可以创建具有多个参数的闭包
typealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()
Run Code Online (Sandbox Code Playgroud) 我知道,枚举常量应该像swift一样
enum CompassPoint {
case North
case South
case East
case West
}
Run Code Online (Sandbox Code Playgroud)
但是如何为第一个元素赋值,如下面的Objective-C代码
enum ShareButtonID : NSInteger
{
ShareButtonIDFB = 100,
ShareButtonIDTwitter,
ShareButtonIDGoogleplus
}ShareButtonID;
Run Code Online (Sandbox Code Playgroud) 什么是以下Objective-C代码的等效swift代码.我无法找到运行时概念的快速主题.
#import <objc/runtime.h>
Class class = [self class];
Run Code Online (Sandbox Code Playgroud)
试图获得类对象self?
更新:
尝试使用以下代码,得到错误'UIViewController.type' doesn't conform to protocol 'AnyObject'
var klass: AnyClass = object_getClass(self)
Run Code Online (Sandbox Code Playgroud)
注意:找到这篇文章,但没有帮助.
当应用程序没有运行时,我很难让它工作.我已locationManager:didRangeBeacons:inRegion:实现并在应用程序在前台或后台运行时调用它,但是当我退出应用程序并锁定屏幕时它似乎没有做任何事情.位置服务图标消失了,我永远不知道我进入了信标范围.LocalNotification应该仍然有效吗?
我在背景模式(XCode 5)中选择了位置更新和使用蓝牙LE配件我认为我不需要它们.
任何帮助非常感谢.
-(void)watchForEvents { // this is called from application:didFinishLaunchingWithOptions
id class = NSClassFromString(@"CLBeaconRegion");
if (!class) {
return;
}
CLBeaconRegion * rflBeacon = [[CLBeaconRegion alloc] initWithProximityUUID:kBeaconUUID identifier:kBeaconString];
rflBeacon.notifyOnEntry = YES;
rflBeacon.notifyOnExit = NO;
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
[self.locationManager startRangingBeaconsInRegion:rflBeacon];
[self.locationManager startMonitoringForRegion:rflBeacon];
}
-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {
if (beacons.count == 0 || eventRanged) { // breakpoint set here for testing
return;
}
eventRanged = YES;
if (backgroundMode) { // this …Run Code Online (Sandbox Code Playgroud) 刚升级到Xcode 5.1,出现以下错误:
忽略文件...依赖关系/ SalesforceNetworkSDK/libSalesforceNetworkSDK.a,缺少文件中所需的体系结构arm64 ...依赖关系/ SalesforceNetworkSDK/libSalesforceNetworkSDK.a(3个切片)
如果我只关闭构建活动拱并从有效拱中移除arm64,我得到:
Build/Products/Debug-iphoneos/libPods.a,文件是为存档而构建的,而不是被链接的架构(armv7)
我尝试使用AFNetworking多部分表单数据进行文件上传操作.我收到了以下错误.我可以找出什么是错误.
[NSURL URLWithString:filePath]
也用过[[NSURL URLWithString:filePath] filePathURL],但不帮助我.当我记录文件路径字符串时:它显示正确的路径:/var/mobile/Applications/3CBF5127-B2FF-49C3-AC98-16BD0886EEE7/Documents/20140326105108_slno.ma4
错误:
@"NSLocalizedFailureReason" : @"Expected URL to be a file URL"
Questions:如何将此路径字符串转换为file url?
我可以使用GIDSignIn下面的代码对单个帐户进行身份验证.
GIDSignIn *googleSignIn = [GIDSignIn sharedInstance];
googleSignIn.delegate = self;
googleSignIn.uiDelegate = self;
googleSignIn.clientID = (NSString*)cGmailAppClientId;
googleSignIn.scopes = [self getGmailAuthenticationScopes];;
[googleSignIn signIn];
Run Code Online (Sandbox Code Playgroud)
但是GIDSignIn是共享实例.这是一个只有一个帐户.如何添加多个帐户?应同时访问多个帐户(Ex获取访问令牌).
相关的SO问题没有给出正确的想法.
我们可以在这里看到苹果公告..根据这个文档,我们可以提交相同的二进制文件,支持32位和64位.我发现这里有一个堆栈溢出答案.但根据这个答案,我们should设定deployment target as IO7+.但是苹果医生说,您可以通过IOS 7和IOS 6支持提交吗?我的问题是,如何通过部署目标IOS6 +生成支持32位和64位的二进制文件?
注意:我正在使用xcode 5.0
更新: Question above is fixed by using xcode 5.0.2.但我很困惑如何为32位以及64位编写代码.我知道一件事,我们必须在某些时候分别做两个代码.但是How can I do?.例如,如果在ios6中不推荐使用一种方法,我们也为ios 6和ios7提供代码.在同样的情况下也遵循这里或为此做一些其他技术.
我试图IBOutlet在类的扩展上声明属性.但它给出了错误
此处不允许使用不带getter/setter方法的'var'声明
class ExampleView : UIView
{
}
extension ExampleView
{
@IBOutlet var btn1, btn2 : UIButton // here I got error.
}
Run Code Online (Sandbox Code Playgroud)
请任何人建议我这样做的正确方法?
在我成功进行身份验证后,我已经通过以下方法获得了用户信息.
// 1. Create a |GTLQuery| object to get people profile who are authenticated
GTLQueryPlus *query = [GTLQueryPlus queryForPeopleGetWithUserId:@"me"];
// 2. Execute the query.
[[[GPPSignIn sharedInstance] plusService] executeQuery:query completionHandler:^(GTLServiceTicket *ticket,GTLPlusPerson *gpUser,NSError *error) {
// here I've retrieved all info about users
NSLog(@"GP user first name : %@",gpUser.name.givenName);
NSLog(@"GP user last name : %@",gpUser.name.familyName);
//But don't know how extract phone number.
}];
Run Code Online (Sandbox Code Playgroud)
这个谷歌文档显示了如何通过谷歌api检索信息.但如果用户将其显示为公开,则无法查看如何提取电话号码?是否可以使用google plus api?