簡體   English   中英

swift objective-c 錯誤無法將類型 () -> () 的值轉換為指定類型 MIDI.IO.Manager

[英]swift objective-c error Cannot convert value of type () -> () to specified type MIDI.IO.Manager

我收到錯誤:無法將類型“()->()”的值轉換為指定類型“MIDI.IO.Manager”

我將把 midiManager 創造的價值暴露給 React Native。 只是不明白為什么我得到這個代碼塊的錯誤

我不知道如何解決這個問題,因為我是 swift 和 Objective-c 的新手。 任何幫助將不勝感激

import Foundation
import MIDIKit

@objc(MidiManager)
class MidiManager: NSObject{
  
  var midiManager: MIDI.IO.Manager = {
          let newManager = MIDI.IO.Manager(
              clientName: "MIDIEventLogger",
              model: "LoggerApp",
              manufacturer: "Orchetect") { notification, manager in
                  print("Core MIDI notification:", notification)
              }
          do {
              logger.debug("Starting MIDI manager")
              try newManager.start()
          } catch {
              logger.default(error)
          }
    }
  

}

在此處輸入圖像描述

如果你想要可計算的屬性,那么

var midiManager: MIDI.IO.Manager {   // 1) remove =
      let newManager = MIDI.IO.Manager(
          clientName: "MIDIEventLogger",
          model: "LoggerApp",
          manufacturer: "Orchetect") { notification, manager in
              print("Core MIDI notification:", notification)
          }
      do {
          logger.debug("Starting MIDI manager")
          try newManager.start()
      } catch {
          logger.default(error)
      }
      return newManager   // 2) return object
 }

如果你想用默認值初始化,那么

var midiManager: MIDI.IO.Manager = {
      let newManager = MIDI.IO.Manager(
          clientName: "MIDIEventLogger",
          model: "LoggerApp",
          manufacturer: "Orchetect") { notification, manager in
              print("Core MIDI notification:", notification)
          }
      do {
          logger.debug("Starting MIDI manager")
          try newManager.start()
      } catch {
          logger.default(error)
      }
      return newManager   // 1) return object
 }()    // 2) make call

您將() -> Void類型的閉包分配給MIDI.IO.Manager類型的變量。 您需要稍微更改一個閉包,然后實際調用它:

var midiManager: MIDI.IO.Manager = {
      let newManager = MIDI.IO.Manager(
          clientName: "MIDIEventLogger",
          model: "LoggerApp",
          manufacturer: "Orchetect") { notification, manager in
              print("Core MIDI notification:", notification)
          }
      do {
          logger.debug("Starting MIDI manager")
          try newManager.start()
      } catch {
          logger.default(error)
      }
      return newManager
}()

但就我個人而言,我認為在初始化之后就開始管理經理並不是一個好主意。 如果它因錯誤而失敗並且您將其返回,則應用程序邏輯可能會在某些地方中斷。

此外,您可能let MIDI.IO.Manager變量,即不可變的變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM