Set は、一意の要素の順不同のコレクションです。配列とほとんど同じです。
Set
のString
に複数の要素を追加/挿入したい。ただし、要素を1つだけ挿入できる単一のメソッドしかなく(パラメーターの引数として単一のSet要素を受け入れます)、文字列(id)のコレクションを持っています。
_@discardableResult mutating func insert(_ newMember: Set.Element) -> (inserted: Bool, memberAfterInsert: Set.Element)
_
どうやってやるの?
私が試したこと:insert(_:)
メソッドと非常によく似た拡張機能を作成しようとしましたが、複数のSet要素を受け入れることができます。これはコレクションの反復の使用と同じですが、どこでも手動で処理する必要はありません。
_extension Set {
@discardableResult mutating func insert(_ newMembers: [Set.Element]) -> (inserted: Bool, memberAfterInsert: Set.Element) {
newMembers.forEach { (member) in
self.insert(member)
}
}
}
_
期待どおりにタプルを返すが、どのように、どこで(どの行)、何を値を返すかがわからない場合は、機能するはずです。
ここにエラーメッセージがあります。
'(挿入された:Bool、memberAfterInsert:Set.Element)'を返すことが期待される関数に戻り値がありません
これに対する解決策は何か。この操作を処理するためのより良い解決策/アプローチはありますか?
それは質問の下のコメントで指摘されましたが、私はそれと同じ目的のための方法があることを明確に述べたいです:
mutating func formUnion<S>(_ other: S) where Element == S.Element, S : Sequence
使用法:
var attendees: Set = ["Alicia", "Bethany", "Diana"]
let visitors = ["Diana", "Marcia", "Nathaniel"]
attendees.formUnion(visitors)
print(attendees)
// Prints "["Diana", "Nathaniel", "Bethany", "Alicia", "Marcia"]"
出典: Apple Developer
ユニオンを含む新しいインスタンスを返す不変のバリアントもあります。
func union<S>(_ other: S) -> Set<Set.Element> where Element == S.Element, S : Sequence
使用法:
let attendees: Set = ["Alicia", "Bethany", "Diana"]
let visitors = ["Marcia", "Nathaniel"]
let attendeesAndVisitors = attendees.union(visitors)
print(attendeesAndVisitors)
// Prints "["Diana", "Nathaniel", "Bethany", "Alicia", "Marcia"]"
出典: Apple Developer