Swift mix가 Objective-C 프로젝트에 빠졌습니다(수시로 업데이트)
5535 단어 Swift
많은 지식을 쌓았기 때문에 나누고 싶어요.
Swift 및 Objective-C 호환성에 대해서는 다음 정보가 있습니다.
Objc에서h에서 설명한 상수를 볼 수 없습니다
아래와 같이, 눈썹에 설명하더라도 구축된 링크에서 복사할 수 있습니다.// Foo.h
static NSString * kSomeConstant = @"hello";
@interface Foo : NSObject
@end
아래와 같다.// Foo.h
extern NSString * const kSomeConstant
@interface Foo : NSObject
@end
// Foo.m
NSString * const kSomeConstant = @"hello";
@implementation Foo : NSObject
@end
Objc 측의 define 매크로가 보이지 않습니다.
글쎄, 그런 거지.
objc에서 Command+Click을 통해 선언부로 이동한 후 {Product]-Swift.h까지 날아가서 설치가 안 보여요.
이것은 원래의 것이다.스위프트까지 날아가도 되잖아!그렇게 생각해.
#if DEBUG가 작동하지 않음 #if DEBUG
NSLog(s)
#endif
이런 느낌의 코드를 이식했어요.#if DEBUG
println(s)
#endif
로그가 출력되지 않았습니다.
가만 생각해보면 오더 스위프트 플래그에 아무것도 안 넣었을 뿐이야.
내연 define 함수 정의는 이식할 수 없습니다
여러분들도 로고에서 이런 걸 사용해 보셨을 거라고 생각해요.#ifdef DEBUG
#define DEBUGLOG(...) NSLog(__VA_ARGS__)
#else
#define DEBUGLOG(...)
#endif
스위프트에선 이걸 전혀 볼 수 없어.
그러나 println 같은 것은 내연 정의에서 사용된다.
swift1.2@inline(never) func println<T>(value: T)
이 정의를 모방하면 바로 바꿀 수 있습니까?그렇게 생각해서 해봤어요.@inline(never) func DEBUGLOG(s:String) {
#if DEBUG
println(s)
#endif
}
Swift 측에서는 이렇게 하면 좋겠지만 Objective-C에서 사용할 때 C99 오류가 발생했습니다.
잘 모르겠지만 내부에서 같은 걸 먼저 만드는 걸 포기하고 그런 느낌으로 대응했다.struct Logger {
static func debug(s:String) {
// このDEBUGはマクロではなく、Other Swift Flagの設定値であることに注意!
#if DEBUG
println(s)
#endif
}
static func info(s:String) {
println(s)
}
}
로거와 관련해서는 다양한 오픈소스 라이브러리가 등장해 도입도 검토할 수 있다.
이 근처는 스위프트로 썼어요.
// Foo.h
static NSString * kSomeConstant = @"hello";
@interface Foo : NSObject
@end
// Foo.h
extern NSString * const kSomeConstant
@interface Foo : NSObject
@end
// Foo.m
NSString * const kSomeConstant = @"hello";
@implementation Foo : NSObject
@end
글쎄, 그런 거지.
objc에서 Command+Click을 통해 선언부로 이동한 후 {Product]-Swift.h까지 날아가서 설치가 안 보여요.
이것은 원래의 것이다.스위프트까지 날아가도 되잖아!그렇게 생각해.
#if DEBUG가 작동하지 않음 #if DEBUG
NSLog(s)
#endif
이런 느낌의 코드를 이식했어요.#if DEBUG
println(s)
#endif
로그가 출력되지 않았습니다.
가만 생각해보면 오더 스위프트 플래그에 아무것도 안 넣었을 뿐이야.
내연 define 함수 정의는 이식할 수 없습니다
여러분들도 로고에서 이런 걸 사용해 보셨을 거라고 생각해요.#ifdef DEBUG
#define DEBUGLOG(...) NSLog(__VA_ARGS__)
#else
#define DEBUGLOG(...)
#endif
스위프트에선 이걸 전혀 볼 수 없어.
그러나 println 같은 것은 내연 정의에서 사용된다.
swift1.2@inline(never) func println<T>(value: T)
이 정의를 모방하면 바로 바꿀 수 있습니까?그렇게 생각해서 해봤어요.@inline(never) func DEBUGLOG(s:String) {
#if DEBUG
println(s)
#endif
}
Swift 측에서는 이렇게 하면 좋겠지만 Objective-C에서 사용할 때 C99 오류가 발생했습니다.
잘 모르겠지만 내부에서 같은 걸 먼저 만드는 걸 포기하고 그런 느낌으로 대응했다.struct Logger {
static func debug(s:String) {
// このDEBUGはマクロではなく、Other Swift Flagの設定値であることに注意!
#if DEBUG
println(s)
#endif
}
static func info(s:String) {
println(s)
}
}
로거와 관련해서는 다양한 오픈소스 라이브러리가 등장해 도입도 검토할 수 있다.
이 근처는 스위프트로 썼어요.
#if DEBUG
NSLog(s)
#endif
이런 느낌의 코드를 이식했어요.#if DEBUG
println(s)
#endif
로그가 출력되지 않았습니다.가만 생각해보면 오더 스위프트 플래그에 아무것도 안 넣었을 뿐이야.
내연 define 함수 정의는 이식할 수 없습니다
여러분들도 로고에서 이런 걸 사용해 보셨을 거라고 생각해요.#ifdef DEBUG
#define DEBUGLOG(...) NSLog(__VA_ARGS__)
#else
#define DEBUGLOG(...)
#endif
스위프트에선 이걸 전혀 볼 수 없어.
그러나 println 같은 것은 내연 정의에서 사용된다.
swift1.2@inline(never) func println<T>(value: T)
이 정의를 모방하면 바로 바꿀 수 있습니까?그렇게 생각해서 해봤어요.@inline(never) func DEBUGLOG(s:String) {
#if DEBUG
println(s)
#endif
}
Swift 측에서는 이렇게 하면 좋겠지만 Objective-C에서 사용할 때 C99 오류가 발생했습니다.
잘 모르겠지만 내부에서 같은 걸 먼저 만드는 걸 포기하고 그런 느낌으로 대응했다.struct Logger {
static func debug(s:String) {
// このDEBUGはマクロではなく、Other Swift Flagの設定値であることに注意!
#if DEBUG
println(s)
#endif
}
static func info(s:String) {
println(s)
}
}
로거와 관련해서는 다양한 오픈소스 라이브러리가 등장해 도입도 검토할 수 있다.
이 근처는 스위프트로 썼어요.
#ifdef DEBUG
#define DEBUGLOG(...) NSLog(__VA_ARGS__)
#else
#define DEBUGLOG(...)
#endif
@inline(never) func println<T>(value: T)
@inline(never) func DEBUGLOG(s:String) {
#if DEBUG
println(s)
#endif
}
struct Logger {
static func debug(s:String) {
// このDEBUGはマクロではなく、Other Swift Flagの設定値であることに注意!
#if DEBUG
println(s)
#endif
}
static func info(s:String) {
println(s)
}
}
그나저나 NSLog보다 println이 더 빠릅니다.
메소드 체인
Objective-C는 nil에 대해 비교적 관용적인 규격으로 예를 들어 방법체인의 중도에 의견 피드백이 있는 경우 if let
에서 토론을 전개해야 한다.
예를 들면, 바로 이런 느낌이다.if let url = NSBundle.mainBundle().appStoreReceiptURL?.path {}
이상은!
Reference
이 문제에 관하여(Swift mix가 Objective-C 프로젝트에 빠졌습니다(수시로 업데이트)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/toshi0383/items/063205e0d188e9ef6e1d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
if let url = NSBundle.mainBundle().appStoreReceiptURL?.path {}
Reference
이 문제에 관하여(Swift mix가 Objective-C 프로젝트에 빠졌습니다(수시로 업데이트)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/toshi0383/items/063205e0d188e9ef6e1d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)