[英]How to get the displayname of a CIFilter?
我正在嘗試獲取CIFilter的顯示名稱的列表。 找到了該站點 , 該站點具有應給出名稱的常量(帶有其他信息),但是下面的代碼不起作用。
控制台輸出:
here 01
here 02
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<CIAccordionFoldTransition 0x7a672dc0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key CIAttributeFilterName.'
我的代碼:
func getCIFilterName(filterName: String) -> String{
var res = "abc"
let fltr = CIFilter(name:filterName)
println("here 01")
if contains(fltr.attributes().keys, kCIAttributeFilterDisplayName){
println("here 02")
res = fltr.valueForKey(kCIAttributeFilterDisplayName) as String
}
println("here 03")
return res
}
attributes
方法返回一個字典。 這樣簡單得多:
func getCIFilterName(filterName: String) -> String {
var res = "abc"
let fltr = CIFilter(name:filterName)
if let disp = fltr.attributes()[kCIAttributeFilterDisplayName] as? String {
res = disp
}
return res
}
但是,我不喜歡您在失敗時返回錯誤值"abc"
技巧。 這就是Optionals的目的-使我們擺脫這種“魔術值”。 所以像這樣重寫:
func getCIFilterName(filterName: String) -> String! {
var res : String! = nil
let fltr = CIFilter(name:filterName)
if let disp = fltr.attributes()[kCIAttributeFilterDisplayName] as? String {
res = disp
}
return res
}
但是,請不要忘記將返回值與nil進行比較,否則如果嘗試將其用於任何內容(如果為 nil),則可能會崩潰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.