2017-08-14 6 views
1

です:私は私がこれを行うカンマで区切られた文字列データの配列にしたい時に差がところで通常2

NSArray *array1 = [obj1 componentsSeparatedByString:@","]; 

しかし、いくつかのプログラマは、このでした:

NSArray <NSString *>*array1 = [obj1 componentsSeparatedByString:@","]; 

両作品を私はしたいですどちらが優れているのかを知ることができます。

+0

を参照してください。私には非常に明確されていないため申し訳ありませんこのパターンの使用。) – Rob

+1

:Dはいそれはあなたでした。これを尋ねる質問をハイジャックしたくなかったので、私は新しいものを開いた。 – GeneCode

+1

問題ありません。新しい質問を始めることはまったく正しいことでした。また、それは驚くほど検索が難しいものの1つです。 (それが何であるか分かっていれば、軽量のジェネリック、それは見つけるのは簡単ですが、それが軽量のジェネリックであることを知っていれば、それを検索する必要はありません)。 – Rob

答えて

3

後者の構文は「軽量汎用」です。つまり、このコレクションを処理すると、NSString *オブジェクトのコレクションを処理していることがわかります。したがって、array1[0]NSStringである必要があります。

NSStringメソッドではないメソッドを誤って使用した場合、コンパイラの警告が表示されることがあります。また、コード補完機能が向上し、そのクラスのメソッドとプロパティのみが表示されます。また、変更可能な配列を扱っていた場合、間違った型のオブジェクトを追加すると、コンパイラが警告する可能性があります。

Objective-Cでは、軽量ジェネリックスは必要ありませんが、コレクションで使用すると予想される型を推測するコンパイラの機能を利用するだけです。 Swiftのジェネリックス(「軽量」と呼ばれる理由)のように、実行時の厳密なタイピングを強制するのではなく、より意味のあるコンパイル時の警告とコード補完を提供します。詳細については


、(私は "一部のプログラマは" 私だったと思う

関連する問題