我认为这是一件非常简单的事情,但由于我是iOS开发和目标C的新手,我无法理解。
#define RESTFUL_PATH_PREFIX @"https://gogch.com/gch-restful";
#define LOGIN RESTFUL_PATH_PREFIX @"/login;
我想要结果"https://gogch.com/gch-restful/login"
但我的结果为"https://gogch.com/gch-restful"
#define DOMAIN "example.com"
#define SUBDOMAIN "test." DOMAIN
答案 0 :(得分:3)
删除尾部分号:
#define RESTFUL_PATH_PREFIX @"https://gogch.com/gch-restful";
^
然后字符串常量可以由编译器连接:
@"first" @"second"
而不是:
@"first"; @"second"
答案 1 :(得分:2)
使用常量而不是定义宏是更好的做法。
static NSString *const YourPath = @"https://...";
然后,您可以使用NSString stringWithFormat:
方法连接字符串。
答案 2 :(得分:0)
由于我对标记为欺骗的问题做出了回答,我也会在这里回答
当然,您可以使用定义OR,您可以使用NSString常量。这确实是一个偏好的问题......但是我看到之前使用的是#define
和NSString const * const
。定义更容易,并且您可能不会通过在整个地方使用常量而不是NSString
的单个不可变实例来保存那么多内存。
一些建议是考虑如何导出NSString
常量。您可能需要EXTERN_PRIVATE
而不是EXTERN
,但我的示例代码将允许您标头的所有客户端读取您在其中声明的字符串常量。
#ifndef constants_h
#define constants_h
// Export the symbol to clients of the static object (library)
#define EXTERN extern __attribute__((visibility("default")))
// Export the symbol, but make it available only within the static object
#define EXTERN_PRIVATE extern __attribute__((visibility("hidden")))
// Make the class symbol available to clients
#define EXTERN_CLASS __attribute__((visibility("default")))
// Hide the class symbol from clients
#define EXTERN_CLASS_PRIVATE __attribute__((visibility("hidden")))
#define INLINE static inline
#import <Foundation/Foundation.h>
EXTERN NSString const * _Nonnull const devBaseUrl;
#endif /* constants_h */
#include "constants.h"
NSString const * _Nonnull const devBaseUrl = @"http://127.0.0.1:8000/";
#import <Foundation/Foundation.h>
#import "constants.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@"Constant value: %@", devBaseUrl);
// Prints: Constant value: http://127.0.0.1:8000/
}
return 0;
}