2017-11-06 11 views
0

os_log (iOS> = 10.0에서 사용 가능) 및 NSLog을 사용하여 자체 로깅 기능을 작성하고 싶습니다. os_log 및 NSLog로 iOS> = 8에 대한 빠른 로깅

는 이미이 코드를 썼다 :

static func LogDebug(log: StaticString) { 
    if #available(iOS 10.0, *) { 
     os_log(log, type: .debug) 
    } else { 
     NSLog(log) 
    } 
} 

을하지만 지금은 StaticString 정상 문자열로 변환 할 수없는 점을 제외하고는 얻을. 그 문제를 해결하는 방법을 알고 있습니까?

답변

1

os_log()NSLog() 및 양자의 첫번째 인자는 형식 문자열이며 다음 가변 인수리스트가 확장되는 (%로 시작) format specifiers를 포함한다.

임의의 문자열을 기록하려면 %@ 형식 다음에 문자열을 사용하십시오. 나는 다음과 같은 컴파일 오류가 얻을 할 경우

func LogDebug(log: String) { 
    if #available(iOS 10.0, macOS 10.12, *) { 
     os_log("%@", type: .debug, log) 
    } else { 
     NSLog("%@", log) 
    } 
} 
1

이렇게 해보십시오.

static func LogDebug(log: StaticString) { 
    if #available(iOS 10.0, *) { 
     os_log(log, type: .debug) 
    } else { 
     NSLog(String(describing: log)) 
    } 
} 
+0

:'유형의 값 예상 인수 유형 '문자열을'변환 할 수 없습니다 '를 StaticString'' –

+0

문자열이 % 문자가 포함 된 경우 그렇지 않으면 충돌하거나 잘못된 출력을 생성 할 수 있습니다 즉,이 함수를 호출하는 동안 StaticString을 전달 중임을 의미합니다. – Venkat

+0

아니야. 아직이 함수를 호출하지 않습니다. 컴파일 오류입니다. –