2017-09-10 5 views
2

NSAttributedStringKey.attachment와 NSAttachmentAttributeName에 문제가 있습니다. 다음은 관련 코드입니다.NSAttributedStringKey.attachment 대 NSAttachmentAttributeName

var key: Any? 
    if #available(iOS 11, *) { 
     key = NSAttributedStringKey.attachment 
    } 
    else { 
     key = NSAttachmentAttributeName 
    } 

두 가지 중 하나가 발생합니다. 나는이 코드를 사용하려고 (아이폰 OS 8의 배포 대상과 내 자신의 디자인의 Cococapod을, 지금 엑스 코드 (9) 건물)하고있어 실제 장소에서, 나는 오류 얻을 :

Type 'NSAttributedStringKey' (aka 'NSString') has no member 'attachment' 

를 또는, 난 그냥 새로운 예제 프로젝트를 만들 및 iOS 8에서 전개 대상을 설정하면, 내가 얻을 :

'NSAttachmentAttributeName' has been renamed to 'NSAttributedStringKey.attachment' 

이 내가 #available에 기대하는 행동이 아니다. 생각?

답변

1

Stringstruct VS 차이는 스위프트 (3) 사이에 (예로서 NSAttachmentAttributeNameString들 사용) 및 신속한 4되지 아이폰 OS 및 iOS < 11> = 11 사이 (NSAttributedStringKey.attachment 같은 정적 구조체 특성을 사용). 예를 들어 스위프트 4 프로젝트에서 iOS의 지원 버전 (예 : .attachment은 iOS 7부터 사용 가능)에서 NSAttributedStringKey.attachment 및 이와 유사한 것을 사용할 수 있습니다. #available은 OS 버전 차이가 아닌 신속한 언어 버전 차이이므로 적용되지 않습니다.

포드가 올바른 스위프트 버전으로 설정되어 있는지 확인한 다음 예상대로 작동해야합니다. 당신은 CocoaPods 말할 수있는 프로젝트의 상단에 .swift-version 파일을 추가하여 :이 마법의 버전 파일은 지난해부터 CocoaPods 블로그 게시물에 통과에서 언급

$ echo 4.0 >.swift-version 

: http://blog.cocoapods.org/CocoaPods-1.1.0/

+0

감사합니다, 앤드류 허버트 ! 빌드 설정에서 포드의 SWIFT_VERSION을 명시 적으로 설정해야했지만, .wift 버전을 변경 한 후에'포드 업데이트 '를 수행하는 것이 불충분 한 것 같습니다. 어떤 경우에도 Swift 4를 사용하면 확실히 문제가 해결됩니다. –