Swift 等同于字符串文字接口? -`请求(方法:'post'|'put')`
Swift equivalent of string literal interfaces? - `request(method: 'post'|'put')`
在 TypeScript 中我可以做这样的事情 [docs]:
request(method: 'post'|'put')
但在 Swift 中,我正在编写错误的代码,例如:
// See RFC7231 and RFC5789 for more info
enum HttpMethods: String {
case GET = "GET"
case HEAD = "HEAD"
case POST = "POST"
case PUT = "PUT"
case DELETE = "DELETE"
case CONNECT = "CONNECT"
case OPTIONS = "OPTIONS"
case TRACE = "TRACE"
case PATCH = "PATCH"
}
如何在编译时限制 Swift 函数的允许输入?
您 Swift 的大写错误。你的意思可能是:
enum HTTPMethod: String {
case get = "GET"
case head = "HEAD"
case post = "POST"
case put = "PUT"
case delete = "DELETE"
case connect = "CONNECT"
case options = "OPTIONS"
case trace = "TRACE"
case patch = "PATCH"
}
如果小写字符串常量没问题,就像您在 Typescript 中所做的那样,您可能会以这种方式编写它以获得相同的结果。 String 枚举自动是它自己的值。
enum HTTPMethods: String {
case get, head, post, put, delete, connect, options, trace, patch
}
如果您想要使用小写的常量名称,但想要使用大写的字符串值,那么您需要使用第一个版本。
要使用它来限制参数,您只需使用类型:
func request(method: HTTPMethod)
概览:
- 使用
OptionSet
支持多个值。
代码:
struct HTTPMethod : OptionSet {
let rawValue : Int
static let get = HTTPMethod(rawValue: 1 << 0)
static let head = HTTPMethod(rawValue: 1 << 1)
static let post = HTTPMethod(rawValue: 1 << 2)
static let put = HTTPMethod(rawValue: 1 << 3)
static let delete = HTTPMethod(rawValue: 1 << 4)
static let connect = HTTPMethod(rawValue: 1 << 5)
static let trace = HTTPMethod(rawValue: 1 << 6)
static let patch = HTTPMethod(rawValue: 1 << 7)
}
func doSomething(method: HTTPMethod) {
}
doSomething(method: [.get, .head, .put])
参考:
在 TypeScript 中我可以做这样的事情 [docs]:
request(method: 'post'|'put')
但在 Swift 中,我正在编写错误的代码,例如:
// See RFC7231 and RFC5789 for more info
enum HttpMethods: String {
case GET = "GET"
case HEAD = "HEAD"
case POST = "POST"
case PUT = "PUT"
case DELETE = "DELETE"
case CONNECT = "CONNECT"
case OPTIONS = "OPTIONS"
case TRACE = "TRACE"
case PATCH = "PATCH"
}
如何在编译时限制 Swift 函数的允许输入?
您 Swift 的大写错误。你的意思可能是:
enum HTTPMethod: String {
case get = "GET"
case head = "HEAD"
case post = "POST"
case put = "PUT"
case delete = "DELETE"
case connect = "CONNECT"
case options = "OPTIONS"
case trace = "TRACE"
case patch = "PATCH"
}
如果小写字符串常量没问题,就像您在 Typescript 中所做的那样,您可能会以这种方式编写它以获得相同的结果。 String 枚举自动是它自己的值。
enum HTTPMethods: String {
case get, head, post, put, delete, connect, options, trace, patch
}
如果您想要使用小写的常量名称,但想要使用大写的字符串值,那么您需要使用第一个版本。
要使用它来限制参数,您只需使用类型:
func request(method: HTTPMethod)
概览:
- 使用
OptionSet
支持多个值。
代码:
struct HTTPMethod : OptionSet {
let rawValue : Int
static let get = HTTPMethod(rawValue: 1 << 0)
static let head = HTTPMethod(rawValue: 1 << 1)
static let post = HTTPMethod(rawValue: 1 << 2)
static let put = HTTPMethod(rawValue: 1 << 3)
static let delete = HTTPMethod(rawValue: 1 << 4)
static let connect = HTTPMethod(rawValue: 1 << 5)
static let trace = HTTPMethod(rawValue: 1 << 6)
static let patch = HTTPMethod(rawValue: 1 << 7)
}
func doSomething(method: HTTPMethod) {
}
doSomething(method: [.get, .head, .put])