これはNSArray
ではありません「型の値 『NSArrayの』期待引数の型に 『NSValue』に変換できません」だからこそがある:
var rects = [NSArray]()
これはNSArray
オブジェクトのスウィフト配列である(つまり、配列内の配列)。 NSValues
を配列に追加する場合は、[NSValue]
が必要です。
var rects = [NSValue]()
let v = NSValue(CGRect: feature.bounds)
rects.append(v)
しかし、私は一般的にこれを行うことに対して、それはスウィフト自身が必要としないラッパーだけでなく、型の安全性を減らすことを追加して(あなたの正確なユースケースによって異なります)助言します。 Objective-C APIに送る前にSwiftでこの配列とやりとりする必要がある場合は、代わりにCGRects
の配列を@Bhushan suggestsとして直接作成します。
var rects = [CGRect]()
rects.append(CGRect(x: 50, y: 50, width: 100, height: 100))
しかし、あなたは今NSArray
引数に、この配列を渡すことはできません、あなたはCannot convert value of type '[CGRect]' to '[AnyObject]'
を言ってエラーが発生します。これに対処するには、それぞれCGRect
をNSValue
にラップするために、Objective-Cに送信する前に、map
を配列に使用するだけです。
someObjCInstance.someProperty = rects.map{NSValue(CGRect:$0)}
このようにして、両方の世界の利点を生かすことができます。 SwiftでCGRects
の配列を使用できる柔軟性とタイプセーフティが得られ、Objective-Cとの相互運用性も得られます。