Swift enum associated values in Objective-C

点点圈 提交于 2020-03-16 06:49:57

问题


  1. Is there a way to use new Swift3 enums with associated value in Objective-C?
  2. Is there a way to declare/bridge Swift3 enums with associated value in Objective-C, if I develop a library and want to give Swift3 users convenient API?

回答1:


I'm afraid it's not possible, Apple has a list of Swift Type Compatibility which explicitly excludes enumerations defined in Swift without Int raw value type.

Reference




回答2:


This is what I did:

In Swift class created the enum

enum Origin {
    case Search(searchTerm: String, searchResultsPageNum: Int)
    case Discovery(pageNum: Int)
}

Then in my Class, created enum property and functions (that are visible to Objective C) to set and get values of the enum property.

@objc class GameSession: NSObject
{
    ...

    var gameOrigin: Origin?

    ...

    let originStr = "origin"
    let notSpecified = "Not Specified"

    @objc func getOrigin() -> NSDictionary
    {
        guard let origin = gameOrigin else {
            return [originStr: notSpecified]
        }

        switch origin {
        case .Search(let searchTerm, let searchResultsPageNum):
            return ["searchTerm": searchTerm, "searchResultsPageNum": "\(searchResultsPageNum)"]
        case .Discovery(let pageNum)
            return ["pageNum": pageNum]
        default:
            return [originStr: notSpecified]
        }
    }

    @objc func setSearchOriginWith(searchTerm: String, searchResultsPageNum: Int, filtered:Bool)
    {
        self.gameOrigin = Origin.Search(searchTerm: searchTerm, searchResultsPageNum: searchResultsPageNum, filtered: filtered)
    }

    @objc func setDiscoveryOriginWith(pageNum: Int)
    {
        self.gameOrigin = Origin.Discovery(pageNum: pageNum)
    }

}


来源:https://stackoverflow.com/questions/40129941/swift-enum-associated-values-in-objective-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!