なぜ直接ループできないのですか[AnyObject]?
? 名前付きジェネレータがないとはどういう意味ですか?[AnyObject]?
型をループするための適切な手法は何ですか?
このコードでは、generator という名前のメンバーがないことを示すエラーが表示されます。
for screen in NSScreen.screens() {
var result : Bool = workspace.setDesktopImageURL(imgurl, forScreen: screen, options: nil, error: &error)
}
ベストアンサー1
screens
オプションを返すので、実際の値を使用する前にアンラップする必要があります。推奨される方法はオプション バインディングです。
if let screens = NSScreen.screens() {
for screen in screens {
var result : Bool = workspace.setDesktopImageURL(imgurl, forScreen: screen, options: nil, error: &error)
}
}
詳細はこちらオプション
NSScreen.screens
は を返すので、オプションのバインディングで配列を[AnyObject]?
のようにキャストする必要があることに注意してください。[NSScreen]
if let screens = NSScreen.screens() as? [NSScreen] {
for screen in screens {
var result : Bool = workspace.setDesktopImageURL(imgurl, forScreen: screen, options: nil, error: &error)
}
}
補遺コメントの質問への回答: エラーメッセージになぜ[AnyObject]? does not have a member named generator
オプションは、含まれる値とは異なる型です (オプションは実際には列挙型です)。配列を反復処理することはできますが、整数または列挙型を反復処理することはできません。
違いを理解するために、実際の例を挙げてみましょう。eBayで新しいテレビを購入し、パッケージが発送されたら、最初にパッケージ(オプション)が空(nil)であるかどうかを確認します。テレビが入っていることを確認したら、パッケージを開封し、箱を脇に置きます。パッケージに入ったままテレビを使用することはできません。同様に、オプションはコンテナです。ない含まれている値が同じ型ではありません。空の場合もあれば、有効な値が含まれている場合もあります。