我喜欢
#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"https://www.test.com/"]];
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"xyz" accessGroup:nil];
我必须始终在所有文件中定义。有没有办法可以在一个文件中定义它们并且每次只导入它?
所以我建议将其添加到我的app delegate
中#import <UIKit/UIKit.h>
@class AFHTTPClient;
@class KeychainItemWrapper;
@interface TestAppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (nonatomic, strong, readonly) AFHTTPClient *httpClient;
@property (nonatomic, strong, readonly) KeychainItemWrapper *keychainItem;
@end
然后尝试在我的viewcontroller中将我的httpClient定义为
httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"https://www.test.com/"]];
它给我一个错误use of undeclared identifier 'httpClient'
答案 0 :(得分:0)
是的,您创建一个具有声明常量的文件并每次导入它:)
答案 1 :(得分:0)
有很多方法。您可以创建专用的头文件。您可以在AFHTTPClient
和KeychainItemWrapper
上添加类别。
我可能只是在AppDelegate
上的所有方法。您无需在AFHTTPClient.h
中导入KeychainItemWrapper.h
和AppDelegate.h
即可执行此操作。您可以直接声明类:
@class AFHTTPClient;
@class KeychainItemWrapper;
@interface AppDelegate : NSObject <UIApplicationDelegate>
@property (nonatomic, readonly) BOOL isIPhone5;
@property (nonatomic, strong, readonly) AFHTTPClient *httpClient;
@property (nonatomic, strong, readonly) KeychainItemWrapper *keychainItem;
...
然后,您只需在实际需要使用这些对象的文件中加入AFHTTPClient.h
和KeychainItemWrapper.h
。
DBL_EPSILON
的比较毫无意义。首先,在iOS上,CGFloat
是float
的别名,而不是double
。你不必要地转换为double
。其次,屏幕的height
为568.单精度float
可以精确地表示-16777216和16777216之间的每个整数,包括568.您可以测试是否相等。
答案 2 :(得分:0)
我几年没有创建一个全局常量文件......对于这样的定义,总会有一个更好,更本地化的地方。尽管如此,这些功能仍然有用 - 会回答,但考虑一下如何将这些功能声明为更接近需要它们的实现。
#import
'全局常量'标题仅在需要时(不在PCH中)使用C函数的示例:
// MONApp_Constants.h
// no #imports up here
extern bool MONApp_Is_iPhone5(void);
@class AFHTTPClient;
extern AFHTTPClient * MONApp_HTTPClient(void);
@class KeychainItemWrapper;
extern KeychainItemWrapper * MONApp_KeychainItem(void);
当然,如果只需要一个实例,则需要找到一个控制对象引用的好地方。在这种情况下,函数不应全局可见。
答案 3 :(得分:0)
您需要在名为constants.h的文件中声明全局变量,并在必要的其他文件中导入。
我建议你不要这样做:
#define httpClient [[[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"https://www.test.com/"]]];
您尝试请求的URL的原因可能有所不同。 #define的想法是拥有不变的项目。即使您总是从@“https://www.test.com/”请求,我仍然不建议您这样做。
希望这会有所帮助......