簡體   English   中英

使用 titleOfSelectedItem 獲取當前 NSPopUpButton 的選擇返回“可選值”

[英]Getting current NSPopUpButton's selection with titleOfSelectedItem returns "optional value"

編輯:我想出了如何防止這種情況,但我仍然有一個問題,為什么它返回一個可選值。 你可以跳到最后。

我是 Swift 的新手,我遇到了一些我無法理解的行為。 假設我將一個名為myButton的彈出按鈕拖到 ViewController 中。 我想將當前選擇的項目打印到控制台。 我會這樣做:

  @IBOutlet weak var myButton: NSPopUpButton!

  override func viewDidLoad() {
    super.viewDidLoad()

    let myVariable = myButton.titleOfSelectedItem
    print(myVariable)

    // Do any additional setup after loading the view.
  }

我希望打印Item1 ,因為這是加載視圖時默認選擇的選項。 但是,我實際上得到Optional("Item 1")

這給我帶來了一些問題。 例如, print(myVariable)行給我這個神秘的錯誤:

從“String?”明確強制表達去任何

另外,我不能做這樣的事情:

if myButton.titleOfSelectedItem == "Item1" || "Item3" {
  let currentSelection = "odd"
} else {
  let currentSelection = "even"
}

當我收到一堆錯誤時——因為|| 據我所知, else的,盡管我認為它應該可以正常工作。

我試過尋找發生這種情況的原因,但找不到任何解釋。 從警告來看,當我使用titleOfSelectedItem獲得選擇時,它似乎給了我一個可選值。 這沒有意義,因為必須選擇菜單項。 它的值不能為nil

我查閱了一堆教程,看看它們是如何實現彈出按鈕功能的。 我唯一能看到的是當有人

  1. 做了一個數組
  2. 使用func removeAllItems()從彈出按鈕中刪除所有項目
  3. 使用func addItems(withTitles: [String])將項目添加到數組中的彈出按鈕
  4. 使用var indexOfSelectedItem: Int獲取所選項目的索引
  5. 從數組中檢索相應的值

然后用那個。 然而,這似乎不必要地復雜,我不明白為什么我不能只使用myButton.titleOfSelectedItem獲得所選彈出項的標題。 誰能建議我該怎么做?

編輯:

所以我意識到你需要“展開”可選值以使其成為正常值,這就像添加一個一樣簡單! 到變量的末尾,如下所示:

  @IBOutlet weak var myButton: NSPopUpButton!

  override func viewDidLoad() {
    super.viewDidLoad()

    let myVariable = myButton.titleOfSelectedItem!
    print(myVariable)

    // Do any additional setup after loading the view.
  }

現在沒有錯誤, Item1被打印出來了。

我還不明白的是,為什么首先要打印一個可選值? NSPopUpButton 中包含三個項目。 必須選擇三個的任何一個。 myButton.titleOfSelectedButton不可能為nil 為什么我需要打開它以將其用作帶有myButton.titleOfSelectedButton! 如果它不是可選的?

titleOfSelectedItem返回可選,因為無法選擇任何項目。

您需要可選綁定來安全地解包可選,並且您必須根據標題字符串評估“Item1”和“Item3”:

if let title = myButton.titleOfSelectedItem {

    print(title)
    let currentSelection : String
    if title == "Item1" || title == "Item3" {
       currentSelection = "odd"
    } else {
       currentSelection = "even"
    }


}

在 Objective C 中,您可以在 awakeFromNib 中執行此操作:

[[your_NSView your_NSPopUpButton] selectItemAtIndex:your_Int];

...當然,您必須已將“your_NSView”和“your_NSPopUpButton”聲明為屬性。

暫無
暫無

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

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