在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'
使用相应字段定义初始化器也无济于事。
当从上下文中清除类型时,有没有办法省略结构的显式初始化?
答案 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")
尽管它对结构的未来更改不是很方便和清晰,也没有很强大。