IOS 13.0 Betaで導入された新しいAPIを使用しようとしています。これらのAPIにアクセスできるように、Xcode 11.0 Beta 3をダウンロードしました。
オンラインで見つけたコードの一部は次のようなことをします:
extension SingleViewController: UIContextMenuInteractionDelegate {
func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
let configuration = UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { actions -> UIMenu<UIAction>? in
// Creating Save button
let save = UIAction(__title: "Save", image: UIImage(systemName: "tray.and.arrow.down.fill"), options: []) { action in
// Just showing some alert
self.showAlert(title: action.title)
}
// Creating Rotate button
let rotate = UIAction(__title: "Rotate", image: UIImage(systemName: "arrow.counterclockwise"), options: []) { action in
self.showAlert(title: action.title)
}
// Creating Delete button
let delete = UIAction(__title: "Delete", image: UIImage(systemName: "trash.fill"), options: .destructive) { action in
self.showAlert(title: action.title)
}
// Creating Edit, which will open Submenu
let edit = UIMenu<UIAction>.create(title: "Edit...", children: [rotate, delete])
// Creating main context menu
return UIMenu<UIAction>.create(title: "Menu", children: [save, edit])
}
return configuration
}
}
これは問題ないようですが、Xcodeでコンパイルすることもできません。私が得るエラーは:
Cannot specialize non-generic type 'UIMenu' Replace '<UIAction>' with ''
構成定数の作成について。
Type of expression is ambiguous without more context
保存アクションの作成時。
および他の同様のエラーをカップルします。
また、この形式のコンストラクタはありません。
UIAction(__ title: "String"、image:UIImage、options:Array)UIMenu.create(...)
Xcode-11ベータ3.0でこれらが欠落しているのはなぜですか?
どんな助けと洞察もいただければ幸いです。
Xcode 11.0 Beta 5では、次のように記述できます。
_extension SingleViewController: UIContextMenuInteractionDelegate {
func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
let configuration = UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { actions -> UIMenu? in
// Creating Save button
let save = UIAction(title: "Save", image: UIImage(systemName: "tray.and.arrow.down.fill")) { action in
// Just showing some alert
self.showAlert(title: action.title)
}
// Creating Rotate button
let rotate = UIAction(title: "Rotate", image: UIImage(systemName: "arrow.counterclockwise")) { action in
self.showAlert(title: action.title)
}
// Creating Delete button
let delete = UIAction(title: "Delete", image: UIImage(systemName: "trash.fill"), attributes: .destructive) { action in
self.showAlert(title: action.title)
}
// Creating Edit, which will open Submenu
let edit = UIMenu(title: "Edit...", children: [rotate, delete])
// Creating main context menu
return UIMenu(title: "Menu", children: [save, edit])
}
return configuration
}
}
_
UIMenu<UIAction>
_の代わりにUIMenu
。image
、attributes
、identifier
などの適切なデフォルト値を持つオプションのパラメーターを削除できます。UIMenu<UIAction>.create(...)
またはUIAction(__title:...)
は不要です。それらはすべて本当のイニシャライザです。