我有一个字符串,说:
Product Description [White]
我想White使用PostgreSQL子串函数从该字符串中提取括号内的任何内容(在本例中).我可以使用它来工作regexp_matches,但是返回一个我不想要的数组,除非我别无选择.
我试过了:
substring('string' from '[(.)]') >>> NULLsubstring('string' from '\[(.)\]') >>> NULLsubstring('string' from '\\[(.)\\]') >>> NULL但这有效:
substring('string' from 'W(.)i]') >>> h 我究竟做错了什么?
我不确定这是否可行.我做了一些研究,但未能找到任何结论.还有一个类似的问题在这里,但它的WPF.
我想要做的是将自定义属性添加到我的表单上的现有WinForms GroupBox(或任何控件).对于此示例,我们将使用"链接".假设我程序中的每个GroupBox都包含一个超链接,然后我启动程序时需要做的就是这样做:
MyGroupBox.Link = "http:\\www.google.com\"
Run Code Online (Sandbox Code Playgroud)
稍后在我的程序中,我可以设置我的超链接内容来引用MyGroupBox.Link.
有可能像这样操纵Winforms控件吗?如果我不需要,我宁愿不做自定义控件.
我从这个问题中看到我可以扩展我的控制权,但在我的具体情况下我会如何看待?这与创建自定义控件相同吗?
假设我有以下可解码结构作为示例来说明我正在尝试执行的操作:
struct Object: Decodable {
var id: String
var name: String
}
Run Code Online (Sandbox Code Playgroud)
和这个 JSON:
[
{
"id": "a",
"name": "test"
},
{
"id": "b",
"name": null
}
]
Run Code Online (Sandbox Code Playgroud)
请注意,名称属性null有时可能是。这基本上可以正常工作,因为 json 键与结构属性名称匹配,所以我不需要枚举CodingKey,但name属性有时可以为 null。但是,name我不想将其设置为可选,而是想替换默认字符串,因此我需要一个自定义初始值设定项:
struct Object: Decodable {
var id: String
var name: String
init(from decoder: Decoder) throws {
...
self.name = <value from decoder> ?? "default name"
...
}
}
Run Code Online (Sandbox Code Playgroud)
但这需要一个CodingKey对象。我正在使用默认键。我CodingKey现在还需要一个枚举吗?即使我所有的钥匙都匹配?或者有没有一种方法可以Decodable只使用键本身来自定义初始化程序?
是否有某种我可以使用的默认容器?
let container = try decoder.container(keyedBy: …Run Code Online (Sandbox Code Playgroud) 我有一个winforms TabControl,我试图循环遍历每个选项卡中包含的所有控件.有没有办法and在foreach循环中添加或者不可能评估多个项目组?例如,这就是我想要做的:
foreach (Control c in tb_Invoices.Controls and tb_Statements.Controls)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
要么
foreach (Control c in tb_Invoices.Controls, tb_Statements.Controls)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
这是可能的,如果没有,那么下一个最好的东西是什么?我需要使用for循环吗?
在 SwiftUI 应用程序中,我有一个ObservableObject跟踪用户设置的应用程序:
class UserSettings: ObservableObject {
@Published var setting: String?
}
Run Code Online (Sandbox Code Playgroud)
我有一个视图模型来控制视图的状态:
class TestViewModel: ObservableObject {
@Published var state: String = ""
}
Run Code Online (Sandbox Code Playgroud)
我有我的看法。当用户设置更改时,我想让视图模型更新视图的状态:
struct HomeView: View {
@EnvironmentObject var userSettings: UserSettings
@ObservedObject var viewModel = TestViewModel()
var body: some View {
Text(viewModel.state)
.onReceive(userSettings.$setting) { setting in
self.viewModel.state = setting
}
}
}
Run Code Online (Sandbox Code Playgroud)
当UserSettings.setting在另一个视图中更改时,它会导致onReceive我的视图在无限循环中被调用,我不明白为什么。我看到了这个问题,这个循环对我来说很有意义,因为被ObservableObject观察者的状态正在随着观察而改变。
但是,就我而言,我不会更改观察到的对象(环境对象)状态。我正在观察环境对象并更改重绘视图的视图模型状态。
视图重绘是否导致了这里的问题?onReceive每次重绘视图时都会被调用吗?
有更好的方法来完成我想做的事情吗?
编辑:这是我的问题的一个大大简化的版本。在我的应用程序中,视图模型负责根据用户的设置执行网络请求并更新视图的状态,例如显示错误消息或加载指示器。
对于我的程序,我创建了一个新类,FinishedPiece其中包含许多可用于我的主程序的公共变量.例如:
class FinishedPiece
{
private double _PieceLength;
public double PieceLength
{
get { return _PieceLength; }
set { _PieceLength = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
这一切都很好,因为那时我可以声明一个新的FinishedPiece并添加属性:
FinishedPiece piece = new FinishedPiece();
piece.PieceLength = 48.25;
Run Code Online (Sandbox Code Playgroud)
我的问题是,怎么做同样的enum?如果我做
public enum Cut
{
Angle = 0,
Straight = 1,
AngleThenStraight = 2,
StraightThenAngle = 3
};
Run Code Online (Sandbox Code Playgroud)
然后我想改变这样的事情:piece.Cut = Cut.Angle;但我只能通过声明一个新FinishedPiece.Cut对象来改变它:
FinishedPiece.Cut cut = new FinishedPiece.Cut();
cut = FinishedPiece.Cut.Angle;
Run Code Online (Sandbox Code Playgroud)
如何enum在变量内部使用,以便我可以做到piece.Cut = Cut.Angle?对我来说,做这样的事情是有道理的,但它似乎不起作用.
public …Run Code Online (Sandbox Code Playgroud) 假设我有一个Customer带有一些属性的类:
public class Customer
{
public string CustAddr = GetCustAddr(); //Long procedure returning address
public double CustAcct = GetCustAcct(); //Long procedure returning account
public string CustInvoice = GetCustInvoice(); //Long procedure returning invoice
}
Run Code Online (Sandbox Code Playgroud)
该类通过函数返回:
public Customer GetData(string query)
{
Customer cust = new Customer();
//set the values for each of the properties
return cust;
}
Run Code Online (Sandbox Code Playgroud)
现在它正在返回整个类,我可以像这样使用它:
lblDisplay = GetData("QUERY").CustAddr.ToString();
Run Code Online (Sandbox Code Playgroud)
但是,假设每个属性都需要花费大量时间来计算.如果我只想要CustAddr值,它仍然可以计算CustAcct并且CustInvoice可用于我.
我如何改变我的功能只返回我正在寻找的属性,除了将我的班级分成单独的程序来调用?例如,我可以:
lblDisplay = GetCustAddr().ToString();
Run Code Online (Sandbox Code Playgroud)
但那不是我想要的.我认为将所有数据放在有组织的结构中而不是一堆不同的过程中会更好.