1. ホーム
  2. ios

[解決済み] Swift - どの型を使うべき?NSStringかStringか?

2022-09-18 13:24:49

質問

Swiftの導入に伴い、私は新しい言語について理解しようとしてきました。

私はiOSの開発者で、次のような型を使用します。 NSString, NSInteger, NSDictionary のような型をアプリケーションで使用します。Apple の電子書籍 "The Swift Programming Language" では、Swift 型を使用していることに気がつきました。 String, Int, Dictionary

Swiftの型はFoundationの型が持っている機能のいくつかを持っていない(または違う名前になっている)ことに気づきました。例えば NSString には length というプロパティがあります。しかし、Swift の String .

iOS アプリケーションの場合、やはり Foundation タイプを使用するべきでしょうか。

どのように解決するのですか?

可能な限り、Swiftのネイティブ型を使用する必要があります。言語はそれらを使用するように最適化されており、機能のほとんどは、ネイティブ型と Foundation 型の間で橋渡しされています。

一方 StringNSString はほとんど互換性があります。 String を受け取るメソッドに変数を渡すことができます。 NSString パラメータを取るメソッドに、またはその逆に、いくつかのメソッドは、現時点では自動的にブリッジされないようです。参照 この回答 を参照してください。 この回答 を使用する方法についての議論は containsString() を使用して部分文字列をチェックすることについての議論です。(免責事項: 私はこれらの答えの両方の著者です)

私は他のデータ型を完全に調査したわけではありませんが、上で述べられたことのあるバージョンは、次のものにも当てはまると思います。 Array / NSArray , Dictionary / NSDictionary と、Swiftの様々な数値型と NSNumber

Foundation 型のいずれかを使用する必要がある場合はいつでも、変数/定数を明示的に型付けするために var str: NSString = "An NSString" のように明示的に変数や定数をタイプするために使用するか、あるいは bridgeToObjectiveC() のように、Swift型の既存の変数/定数に対して使用します。 str.bridgeToObjectiveC().length のようにします。をキャストすることもできます。 StringNSString を使用することで str as NSString .

しかし、これらのテクニックが明示的にFoundationの型、または少なくともその一部を使用する必要性は、将来的には陳腐化する可能性があります。 String / NSString ブリッジなど、完全にシームレスであるべきです。

このテーマに関する徹底的な議論については、以下を参照してください。 CocoaとObjective-CでSwiftを使用する。Cocoaデータ型での作業