gpt4 book ai didi

ios - 带有字符串枚举的开关未被识别

转载 作者:行者123 更新时间:2023-11-28 05:33:36 26 4
gpt4 key购买 nike

我有一个 CIFilter,我想对其做一些效果。我有一个 String 类型的枚举

enum FilterType:String{
case Sepiatone = "CISepiatone"
case FalseColor = "CIFalseColor"
}

但是如果我尝试下面的代码,枚举不会被视为字符串

 private class func createFilter(inout filter:CIFilter!,filterName:FilterType)
{
switch filterName{
case .Sepiatone:
filter = CIFilter(name: filterName) //ERROR "Extra argument 'name' in call
default:
println("Filter name is not a match")
}
}

错误消息意味着它没有将我的枚举类型视为字符串,因此认为我使用了错误的初始化。

你知道我的 switch 语句有什么问题吗?

最佳答案

您必须使用 rawValue 属性从枚举中获取原始值:

filter = CIFilter(name: filterName.rawValue)

只是为了完整起见,类似地,您可以使用初始化程序从原始值中获取枚举案例:

var filterType = FilterType(rawValue: "CISepiatone")

附录:我认为您在filterName() 方法中使用了不必要的开关。如果 FilterType 枚举仅包含有效过滤器,则 FilterType 类型的变量不能包含不是其中之一的值。所以在我看来这个实现应该有效:

private class func createFilter(inout filter:CIFilter!,filterName:FilterType)
{
filter = CIFilter(name: filterName.rawValue)
}

此外,不推荐使用参数作为返回值,除非你有充分的理由 - 你可以让函数返回过滤器:

func createFilter(filterName:FilterType) -> CIFilter
{
return CIFilter(name: filterName.rawValue)
}

最后,您可以删除该函数并添加一个 CIImage 扩展:

extension CIFilter {
convenience init (filterType: FilterType) {
self.init(name: filterType.rawValue)
}
}

let filterType = FilterType.FalseColor
let filter = CIFilter(filterType: filterType)

不是更简单吗?


注意:如果您像我一样使用 Xcode 6.0.x,请将 filterName.rawValue 替换为 filterName.toRaw()FilterType(rawValue: filterName)FilterType.fromRaw(filterName)

关于ios - 带有字符串枚举的开关未被识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26387755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com