Swift의 도입과 함께 저는 새로운 언어를 이해하려고 노력했습니다.
저는 iOS 개발자이며 NSString, NSInteger, NSDictionary
응용 프로그램에서 와 같은 유형을 사용 합니다. Apple의 “The Swift Programming Language”ebook에서 Swift 유형을 사용합니다.String, Int, Dictionary
Swift 유형에는 Foundation 유형이 수행하는 일부 기능이 없거나 이름이 다릅니다. 예를 들어 NSString
이 length
속성을. 그러나 나는 Swift와 비슷한 것을 찾을 수 없었습니다.String
.
iOS 애플리케이션의 경우 여전히 Foundation 유형을 사용해야합니까?
답변
가능할 때마다 Swift 기본 유형을 사용해야합니다. 언어는이를 사용하도록 최적화되어 있으며 대부분의 기능은 기본 유형과 유형간에 연결 Foundation
됩니다.
String
및 NSString
대부분은 상호 교환이 가능 하지만 , 즉 매개 String
변수를 사용하는 메소드에 변수를 전달할 수 NSString
있고 그 반대의 경우도 가능하지만 일부 메소드는 현재 자동으로 연결되지 않는 것 같습니다. 문자열의 길이 와이 답변 을 얻는 방법에 대한 토론 은 이 답변 을 참조하십시오. 사용하는 방법에 대한 설명은containsString()
문자열을 확인 할 수 있습니다. (면책 조항 :이 두 답변의 저자입니다)
다른 데이터 유형을 완전히 탐색하지는 않았지만 위에서 언급 한 일부 버전이 Array
/ NSArray
, Dictionary
/NSDictionary
및 Swift의 다양한 숫자 유형NSNumber
Foundation 유형 중 하나를 사용해야 할 때마다 변수 / 상수를 명시 적으로 입력 var str: NSString = "An NSString"
하거나 예를 들어 bridgeToObjectiveC()
Swift 유형의 기존 변수 / 상수에 사용할 수 있습니다 str.bridgeToObjectiveC().length
. a String
를NSString
을 사용하여str as NSString
.
그러나 이러한 기술이 Foundation 유형 또는 최소한 일부를 명시 적으로 사용하는 데 필요한 필요성은 언어 참조에 명시된 내용에서 String
/NSString
예를 들어 브리지가 완전히 매끄럽게 이루어져야하기 .
주제에 대한 자세한 논의 는 Cocoa 및 Objective-C와 함께 Swift 사용 : Cocoa 데이터 유형 작업을 참조하십시오 .
답변
NSString : 힙에 상주하고 항상 참조로 전달되는 객체를 생성합니다.
문자열 : 전달할 때마다 값 유형이며 값으로 전달됩니다. Struct 및 Enum과 마찬가지로 String 자체는 Swift의 Struct입니다.
public struct String {
// string implementation
}
그러나 통과하면 사본이 생성되지 않습니다. 처음 변경하면 복사본이 생성됩니다.
String은 NSString으로 Objective-C에 자동으로 연결됩니다. Swift Standard Library에없는 경우 NSString으로 정의 된 메소드에 액세스하려면 Foundation 프레임 워크를 가져와야합니다.
Swift String은 강력한 내장 기능을 가지고 있습니다.
문자열 초기화 :
var emptyString = "" // Empty (Mutable)
let anotherString = String() // empty String immutable
let a = String(false) // from boolean: "false"
let d = String(5.999) // " Double "5.99"
let e = String(555) // " Int "555"
// New in Swift 4.2
let hexString = String(278, radix: 18, uppercase: true) // "F8"
반복되는 값에서 문자열 만들기 :
let repeatingString = String(repeating:"123", count:2) // "123123"
Swift 4에서-> 문자열은 문자 모음입니다.
이제 String은 누구나 Collection 유형에서 수행 할 수있는 모든 작업을 수행 할 수 있습니다.
자세한 내용은 애플 문서를 참조하십시오.
답변
가장 좋은 방법은 Swift 네이티브 유형과 클래스를 사용하는 것입니다. 다른 사람들은 NSString이 무료로 String으로 번역한다고 언급했지만, 100 %는 같지 않습니다. 예를 들면 다음과 같습니다.
var nsstring: NSString = "\U0001F496"
var string: String = "\U0001F496"
nsstring.length
count(string)
문자열의 문자 수를 계산하려면 count () 메서드를 사용해야합니다. 또한 nsstring.length는 UTF16을 기반으로 길이를 계산하므로 2를 반환합니다.
유사 함, 예 동일 함, 아니오
답변
String
그리고 NSString
정말 당신이 사용하는 하나의 문제가되지 않도록, 교환 할 수있다. 다음을 사용하여 항상 둘 사이에 캐스팅 할 수 있습니다.
let s = "hello" as NSString
또는
let s: NSString = "hello"
NSInteger
int
또는 a long
(아키텍처에 따라 다름)에 대한 별칭 이므로 Int
.
NSDictionary
Dictionary
완전히 별개의 구현 이기 때문에 다른 문제 입니다.
일반적으로 나는 가능할 때마다 빠른 유형을 고수 bridgeToObjectiveC()
하고 빠른 클래스에서 제공 하는 방법을 사용하여 필요할 때 항상 둘 사이를 변환 할 수 있습니다.
답변
목표 C 유형은 여전히 동적으로 전달되기 때문에 아마도 더 느릴 것입니다. Objective-C API와 상호 작용할 필요가없는 한 Swift 네이티브 유형을 사용하는 것이 가장 좋습니다.
답변
가능할 때마다 Swift 기본 유형을 사용하십시오. 그러나 String의 경우 NSString
다음과 같은 모든 메소드에 “원활한”액세스 권한 이 있습니다.
var greeting = "Hello!"
var len = (greeting as NSString).length
답변
Swift 4 업데이트
String은 swift 4에서 수정을 가져옵니다. 이제 직접 count를 호출 할 수 있으며 이모 지처럼 자소 클러스터를 1 개로 간주합니다. NSString은 업데이트되지 않고 다른 방식으로 계산됩니다.
var nsstring: NSString = "????"
var string: String = "????"
print(nsstring.length) // 11
print(string.count) // 1