如何从元组文字中自动转换结构?

时间:2016-08-28 20:51:11

标签: swift

在Swift中,可以自动将某些文字转换为其他类型:

let _: Double = 1  // Int literal to Double variable

但是,当涉及到结构时,编译器拒绝执行类似的转换:

struct User {
  var id: Int
  var name: String
}

let _: User = (id: 778, name: "Pete")  // error: cannot convert value of type '(id: Int, name: String)' to specified type 'User'

使用相应字段定义初始化器也无济于事。

当从上下文中清除类型时,有没有办法省略结构的显式初始化?

1 个答案:

答案 0 :(得分:1)

允许从文档中对以下内容进行文字初始化:Int,Float,Array,Dictionary,String,nil,UnicodeScalar,Bool和ExtendedGraphemeCluster

没有列出音色,所以不,您无法像C ++那样使用Configure()语法。

无论如何,在Swift中,您必须指定类型,而不是:

app.UseSwaggerUI(options => { options.SwaggerEndpoint("/My.Api/swagger/v1/swagger.json", "My API V1"); options.OAuthClientId(Clients.TestClient); options.OAuthAppName("My Api - Swagger"); options.OAuthClientSecret(Configuration["TestClientSecret"]); }); internal static class SecuritySchemes { public static OpenApiSecurityScheme BearerScheme(IConfiguration config) => new OpenApiSecurityScheme { Type = SecuritySchemeType.OAuth2, Description = "Standard authorisation using the Bearer scheme. Example: \"bearer {token}\"", In = ParameterLocation.Header, Name = "Authorization", Scheme = "Bearer", OpenIdConnectUrl = new System.Uri($"{config["TokenServerUrl"]}.well-known/openid-configuration"), BearerFormat = "JWT", Flows = new OpenApiOAuthFlows { Password = new OpenApiOAuthFlow { AuthorizationUrl = new System.Uri($"{config["TokenServerUrl"]}connect/authorize"), Scopes = new Dictionary<string, string> { { Scopes.Api, "My Api" } }, TokenUrl = new System.Uri($"{config["TokenServerUrl"]}connect/token") } } }; public static OpenApiSecurityScheme OAuthScheme => new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" }, Scheme = "oauth2", Name = "Bearer", In = ParameterLocation.Header, }; }

只需使用:

{}

那和第一个一样冗长。


如果您真的需要从元组初始化,则可以做的最好的是:

let user: User = (id: 778, name: "Pete")

尽管它对结构的未来更改不是很方便和清晰,也没有很强大。