[英]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
。
我查閱了一堆教程,看看它們是如何實現彈出按鈕功能的。 我唯一能看到的是當有人
func removeAllItems()
從彈出按鈕中刪除所有項目func addItems(withTitles: [String])
將項目添加到數組中的彈出按鈕var indexOfSelectedItem: Int
獲取所選項目的索引然后用那個。 然而,這似乎不必要地復雜,我不明白為什么我不能只使用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.