对于swiftsome不透明类型不规则图形感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍不规则透亮线什么意思,并为您提供关于(senderasTButton).some和TButton(sen
对于swift some 不透明类型 不规则图形感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍不规则透亮线什么意思,并为您提供关于(sender as TButton).some 和 TButton(sender).some 的区别是什么?、./configure我可以使用/ some / path / configure – Unix,Linux、actix web - sqlx - juniper:我尝试使用同步解析器解析 Some("Query") 类型的异步字段用户'、Android Gradle Build Error:Some file crunching failed, see logs for details的快速解决方法的有用信息。
本文目录一览:- swift some 不透明类型 不规则图形(不规则透亮线什么意思)
- (sender as TButton).some 和 TButton(sender).some 的区别是什么?
- ./configure我可以使用/ some / path / configure – Unix,Linux
- actix web - sqlx - juniper:我尝试使用同步解析器解析 Some("Query") 类型的异步字段用户'
- Android Gradle Build Error:Some file crunching failed, see logs for details的快速解决方法
swift some 不透明类型 不规则图形(不规则透亮线什么意思)
直接上案列
打印一个不规则正方形 要求返回值三角形加+(四方形+(倒三角形))
返回值类型->JoindShape<Triangle,JoindShape<Square,FlippedShape<Triangle>>>
看着费劲。。不友好
//
// AboutError.swift
// learn_swiftUi
//
// Created by liuan on 2020/9/4.
// Copyright © 2020 liuan. All rights reserved.
//
import UIKit
var str = "Hello ,playground"
protocol Shape{
func draw()->String
}
struct Triangle: Shape{
func draw() -> String {
var result=[String]()
for length in 1...size{
result.append(String(repeating: "*", count: length))
}
return result.joined(separator: "\n")
}
var size:Int
}
print("三角")
let t = Triangle(size: 5)
print(t.draw())
struct Square : Shape{
var size:Int
func draw() -> String {
var result=[String]()
for length in 0..<size{
result.append(String(repeating: "*", count: size))
}
return result.joined(separator: "\n")
}
}
print("正方形")
let t2 = Square(size: 5)
print(t2.draw())
//图形反转
struct FlippedShape<T: Shape>:Shape{
var shape: T
func draw() -> String {
var result = shape.draw().split(separator: "\n")
return result.reversed().joined(separator: "\n")
}
}
//组合图形
struct JoindShape<T: Shape,U: Shape>: Shape{
var top: T
var bottom: U
func draw() -> String {
return top.draw()+"\n" + bottom.draw()
}
}
//不规则四边形
func makeTapedzoid() -> JoindShape<Triangle,JoindShape<Square,FlippedShape<Triangle>>>{
let t = Triangle(size: 3)
let s = Square(size: 3)
let f = FlippedShape(shape: t)
return JoindShape(top:t,bottom: JoindShape(top: s, bottom: f))
}
print("不规则四边形")
let tapezoid = makeTapedzoid()
print(tapezoid.draw())
打印结果
三角
*
**
***
****
*****
正方形
*****
*****
*****
*****
*****
不规则四边形
*
**
***
***
***
***
***
**
*
优化
把刚才得很唱得返回格式 改为 Shape
//
// AboutError.swift
// learn_swiftUi
//
// Created by liuan on 2020/9/4.
// Copyright © 2020 liuan. All rights reserved.
//
import UIKit
var str = "Hello ,playground"
protocol Shape{
func draw()->String
}
struct Triangle: Shape{
func draw() -> String {
var result=[String]()
for length in 1...size{
result.append(String(repeating: "*", count: length))
}
return result.joined(separator: "\n")
}
var size:Int
}
print("三角")
let t = Triangle(size: 5)
print(t.draw())
struct Square : Shape{
var size:Int
func draw() -> String {
var result=[String]()
for length in 0..<size{
result.append(String(repeating: "*", count: size))
}
return result.joined(separator: "\n")
}
}
print("正方形")
let t2 = Square(size: 5)
print(t2.draw())
//图形反转
struct FlippedShape<T: Shape>:Shape{
var shape: T
func draw() -> String {
var result = shape.draw().split(separator: "\n")
return result.reversed().joined(separator: "\n")
}
}
//组合图形
struct JoindShape<T: Shape,U: Shape>: Shape{
var top: T
var bottom: U
func draw() -> String {
return top.draw()+"\n" + bottom.draw()
}
}
//不规则四边形
func makeTapedzoid() -> Shape{
let t = Triangle(size: 3)
let s = Square(size: 3)
let f = FlippedShape(shape: t)
return JoindShape(top:t,bottom: JoindShape(top: s, bottom: f))
}
print("不规则四边形")
let tapezoid = makeTapedzoid()
print(tapezoid.draw())
返回结果不变。
那么 如果返回得类型不是固定得。假如要返回Square类型 但是我们仍旧声名为Shape
//不规则四边形
func makeTapedzoid(_ size: Int) -> Shape{
let t = Triangle(size:size)
let s = Square(size: size)
let f = FlippedShape(shape: t)
if size > 3 {
return f
}
return JoindShape(top:t,bottom: JoindShape(top: s, bottom: f))
}
print("不规则四边形")
let tapezoid = makeTapedzoid(3)
print(tapezoid.draw())
print("不规则四边形1")
let tapezoid2 = makeTapedzoid(4)
print(tapezoid2.draw())
他就有更多得可能。返回父类是shape得类
加上some 后
代码就会报错
这里得some也指的是只能返回一样得返回 类型。。。。
//不规则四边形
func makeTapedzoid(_ size: Int) -> some Shape{
let t = Triangle(size:size)
let s = Square(size: size)
let f = FlippedShape(shape: t)
return JoindShape(top:t,bottom: JoindShape(top: s, bottom: f))
}
那为啥设计的时候不叫only呢。。,, ,
英语不好的我不懂为啥
这个api显得好积累啊。。为了规范返回值?
其实还有一种用处
协议有自己的泛型关键字associatedtype 而不是<>
下面代码会报错。因为
protocol Container{
associatedtype Item
var count:Int {get}
subscript(index:Int)->Item {get}
}
extension Array:Container{}
func makeProtocolContainer<T>(item: T)-> Container{
return [item]
}
协议“容器”只能用作通用约束,因为它具有“自身”或关联的类型要求
some 就成了 刚需
protocol Container{
associatedtype Item
var count:Int {get}
subscript(index:Int)->Item {get}
}
extension Array:Container{}
func makeProtocolContainer<T>(item: T)-> some Container{
return [item]
}
这样就不报错了
(sender as TButton).some 和 TButton(sender).some 的区别是什么?
(sender as TButton).some 和 TButton(sender).some 的区别是什么?
(Sender as TButton) 与 TButton(Sender) 都是 Typecasting,只是语法不同
罢了, 因此, 写成 (Sender as TButton).Caption := ''Test'';或者
TButton(Sender).Caption := ''Test'';
结果都一样
针对个别物件个别事件写事件处理程序, 并不需判定 Sender为何, 因为很明
显的 Sender便是这个正在撰写的物件, 但是在多个物件共用一个事件处理程序的情况下,Sender 是谁(谁发生OnClick事件)的判断就有其必要性
if Sender = Button1 的写法是直接判定Sender是不是 Button1这个物件, 但是如果按钮有 64 个, 写 64 个 if叙述恐怕会累死人的...
因此, 以类别的判定取代个别物件的副本(instance)的判定, 应是比较简明的
作法, 於是, 我们可以写成 Sender is TButton, 为真时, 以上述型别转换的方式 --- TButton(Sender).XXXX 撰写, 就可以大辐简化程式,
毕竟,同属 TButton 的物件, 都有相同的属性(属性值不一定相同), 不是吗?
值得注意的是, Sender is (Class Name) 的 Class Name 判断是会牵涉到父阶的继承关系的, 例如: Button1 是Button,Button2是 TBitBtn, 这样的话:Button1 is TButton 为真, Button2 is TButton 也是真, 因为TBitBtn 继承自TButton, 也就是说, 球是球, 篮球也是球. 应用这个观念, 下列的程式:
if ActiveControl is TDBEdit then
(ActiveControl as TDBEdit).CutToClipboard
else
if ActiveControl is TDBMemo then
(ActiveControl as TDBMemo).CutToClipboard;
如果改成:
if ActiveControl is TCustomMemo then
TCustomMemo(ActiveControl).CutToClipboard;
程序的执行效率就更好了, 因为 TDbEdit 与 TDbMemo 的共同父阶是
TCustomMemo, 而 TCustomMemo
也有 CutToClipboard 方法
有没有试一下我的例子,就知道了。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TA = class
public
procedure Test;
end;
TB = class(TA)
public
procedure Test;
procedure Test1;
procedure Test2;
end;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TA.Test;
begin
Showmessage(''Call TA.test'');
end;
procedure TB.Test;
begin
Showmessage(''Call TB.test'');
end;
procedure TB.Test1;
begin
(self as TA).test;
end;
procedure TB.Test2;
begin
TA(self).test;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
with TB.Createdo
begin
test1;
free;
end;
{
with TB.Createdo
begin
test2;
free;
end;
}
end;
end.
www:
如果sender 与 TButton 没有关系,编译照样不通过。
./configure我可以使用/ some / path / configure – Unix,Linux
# cd /container/directory/ # ./configure
代替:
# pwd /external/path # /container/directory/configure
也许是因为在/ container / directory /中调用./configure是在/ container / directory /中创建的文件
是否可以选择在/ container /目录/从/ external / path调用内部创建文件(makefile等)?
就像是:
# /container/directory/configure --CreateOutputFiles=/container/directory/
解决方法
这使您可以以干净的方式进行每个arch构建,它可以让您轻松地吹走构建的文件而不是源文件等.
我不知道是否有一种可靠且可移植的方法来自动确定当前正在执行的脚本的位置(有关此内容的讨论,请参阅Bash FAQ 028).如果没有那就让你想做你想做的事情很难.
我不知道,一个标志让你在其他地方设置输出目录,但可能有一个.
actix web - sqlx - juniper:我尝试使用同步解析器解析 Some("Query") 类型的异步字段用户'
如何解决actix web - sqlx - juniper:我尝试使用同步解析器解析 Some("Query") 类型的异步字段用户''?
我正在尝试在我的 Rust 项目中使用 Actix-sqlx-Juniper。我遵循并结合了我发现的任何教程,它成功编译并运行。但是当我尝试发布查询时,我在终端中收到此错误:
thread ''actix-web'' panicked at ''Tried to resolve async field users on type Some("Query") with a sync resolver'',src/graphql.rs:15:1
我的 GraphiQL 显示 "Thread pool is gone"
这是src/graphql.rs
:
#[derive(Clone,Debug)]
pub struct Context {
pub pool: PgPool,}
impl juniper::Context for Context {}
pub struct Query;
#[graphql_object(Context = Context)] // this is line 15
impl Query {
fn apiVersion() -> &str {
"1.0"
}
#[graphql(description = "Hello")]
pub async fn users(ctx: &Context) -> FieldResult<Vec<User>> {
println!("{:#?}",ctx);
sqlx::query_as::<_,User>("SELECT * FROM users")
.fetch_all(&ctx.pool)
.await
.map_err(|e| e.into())
}
}
pub type Schema = RootNode<''static,Query,EmptyMutation<Context>,EmptySubscription<Context>>;
pub fn create_schema() -> Schema {
Schema::new(Query {},EmptyMutation::new(),EmptySubscription::new())
}
但是在我跟踪错误之后,当我尝试在我的 execute_sync
中使用 src/handler.rs
时它惊慌失措:
pub fn graphql_handlers(config: &mut ServiceConfig) {
config
.data(create_schema())
.route("/graphql",web::get().to(graphql_playground))
.route("/graphql",web::post().to(graphql));
}
...
...
async fn graphql(
pool: web::Data<PgPool>,schema: web::Data<Schema>,data: web::Json<GraphQLRequest>,) -> Result<HttpResponse,Error> {
let ctx = Context {
pool: pool.get_ref().to_owned(),};
let res = block(move || {
let res = data.execute_sync(&schema,&ctx);
Ok::<_,serde_json::error::Error>(serde_json::to_string(&res)?)
})
.await
.map_err(Error::from)?;
Ok(HttpResponse::Ok()
.content_type("application/json")
.body(res))
}
我试图找到解决方案或样板代码,但仍然找不到。
这是我的main.rs
:
#[actix_web::main]
async fn main() -> Result<()> {
let pool = create_pool().await.expect("Failed connecting to postgres");
HttpServer::new(move || {
App::new()
.data(pool.clone())
.wrap(Logger::default())
.configure(graphql_handlers)
})
.bind("127.0.0.1:8000")?
.run()
.await
}
这是我的依赖项:
actix-web = "3"
juniper = "0.15"
serde = { version = "1.0",features = ["derive"] }
serde_json = "1.0.64"
uuid = { version = "0.8",features = [ "serde","v4"] }
sqlx = { version = "0.4",features = [ "runtime-actix-rustls","postgres","uuid" ] }
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
Android Gradle Build Error:Some file crunching failed, see logs for details的快速解决方法
错误日志:Error:java.lang.RuntimeException: Some file crunching Failed,see logs for details
Log:
FAILURE: Build Failed with an exception.
* What went wrong:
Execution Failed for task ':app:mergeDebugResources'.
> Error: java.lang.RuntimeException: Crunching Cruncher ic_default_home_new.png Failed,see logs
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
解决方法如下:
android { compileSdkVersion 23 buildToolsversion "23.0.3" aaptOptions { cruncherEnabled = false useNewCruncher = false } defaultConfig { applicationId "com.security.browser.xinj" minSdkVersion 15 targetSdkVersion 22 versionCode 2 versionName "1.0.1" ndk { //设置支持的SO库架构 abiFilters 'armeabi','x86','armeabi-v7a','x86_64','arm64-v8a' } } }
出现这个错误的原因是构建Gradle的时候,Gradle会去检查一下是否修改过文件的后缀名,
一半大多数是出现在图片上,.jpg修改成了.png就会出现这个问题。
以上所述是小编给大家介绍的Android Gradle Build Error:Some file crunching Failed,see logs for details的快速解决方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言!
关于swift some 不透明类型 不规则图形和不规则透亮线什么意思的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于(sender as TButton).some 和 TButton(sender).some 的区别是什么?、./configure我可以使用/ some / path / configure – Unix,Linux、actix web - sqlx - juniper:我尝试使用同步解析器解析 Some("Query") 类型的异步字段用户'、Android Gradle Build Error:Some file crunching failed, see logs for details的快速解决方法等相关内容,可以在本站寻找。
本文标签: