我正在练习如何使用协议和委托在两个视图控制器之间进行通信(在 xCode 背景中,即使我在项目中使用协议,我也会遇到同样的问题,委托为零),但是在设置它向我显示的所有内容后出现问题我的委托为零,并且发送者 VC 不发送任何数据,因为委托为零。
我已经确认了协议,并将接收方 VC 设置为委托,但仍然看不出问题出在哪里。
协议
protocol theCommunicationsStructionProtocol{
func dataToTransmit(Data: String)
}
Run Code Online (Sandbox Code Playgroud)
发送者 VC
class TheSenderVC{
var delegate: theCommunicationsStructionProtocol?
func lookingForDelegate(){
self.delegate?.dataToTransmit(Data: "Data has been sent")
}
}
Run Code Online (Sandbox Code Playgroud)
接收器VC
class TheReceiverVc1: theCommunicationsStructionProtocol{
var TheSenderVCObj = TheSenderVC()
func delegateLuncher(){
TheSenderVCObj.delegate = self
}
func dataToTransmit(Data: String) {
print("from VC1: \(Data)")
}
}
Run Code Online (Sandbox Code Playgroud)
调用 delegateLuncher() 在接收者 VC 中设置委托
TheSenderVC().lookingForDelegate()
Run Code Online (Sandbox Code Playgroud)
从发送方 VC 调用lookingForDelegate() 来查找委托并向其发送数据
TheReceiverVc1().delegateLuncher()
Run Code Online (Sandbox Code Playgroud)
注意:我尝试使用以下方式从接收者 VC 访问委托:
class TheReceiverVc1: theCommunicationsStructionProtocol{
var TheSenderVCObj: TheSenderVC?
func delegateLuncher(){
self.TheSenderVCObj?.delegate = self
} …
Run Code Online (Sandbox Code Playgroud) 考虑 SwiftUI 中的以下扩展:
extension Text{
func applyBG() -> some View {
self
.padding(20)
.background(Color(hue: 0, saturation: 0, brightness: 0.22).cornerRadius(10))
.foregroundColor(.white)
}
}
extension TextField{
func applyBG() -> some View {
self
.padding(20)
.background(Color(hue: 0, saturation: 0, brightness: 0.22).cornerRadius(10))
.foregroundColor(.white)
}
}
Run Code Online (Sandbox Code Playgroud)
我觉得我可以写得更好,避免重复。我可能可以用类似的方法解决这个问题:
extension View{
func applyBG() -> some View {
self
.padding(20)
.background(Color(hue: 0, saturation: 0, brightness: 0.22).cornerRadius(10))
.foregroundColor(.white)
}
}
Run Code Online (Sandbox Code Playgroud)
但我不希望我所有的观点都能够调用这个方法。我只希望 Text 和 Textfield 有这样的方法。我尝试使用协议和关联类型,但我无法一次编写这些行以实现干净的代码。关于如何实现 DRY 的任何提示或伪代码?
如您所知,这custom url protocol
是一个允许我们在网页和我们的应用程序之间进行通信的功能.例如,Y!当您想通过网页向其他人发送pm时,Messenger使用此协议:
<a href="ymsgr:sendim?YahooID">Click to send pm</a>
Run Code Online (Sandbox Code Playgroud)
现在,问题是如何监视(挂钩)custom url protocol
窗口中的所有消息?抓住它们有可能吗?
您可以在下面的图像中看到我正在尝试扩展Collection
协议以包含一个被调用的方法removingDuplicates
,该方法应该完全按照它所说的去做.编译器显示的错误似乎与Equatable
协议的定义直接相矛盾.这是一个错误还是我误解了什么?
查看Apples头文件NSView.h
我看到这一行
@protocol NSDraggingSource;
Run Code Online (Sandbox Code Playgroud)
后来我明白了
@interface NSView : NSResponder <..., NSDraggingDestination,...>
Run Code Online (Sandbox Code Playgroud)
那么NSView符合哪些协议?
据我所知,有以下协议用于发送和接收电子邮件:
这些协议中的哪些用于在电子邮件中发送附件?发送电子邮件时 FTP 或 TFTP 有什么作用吗?
networking network-programming cisco protocols email-attachments
我正在尝试将XML String输出到.xml文件中以进行调试.我的字符串看起来像这样:
System.out.println("xmlString = \n" + xmlString);
===========================================================
INFO: xmlString =
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">2</int>
<lst name="params">
<str name="indent">true</str>
<str name="q">source_t:ST</str>
<str name="wt">xml</str>
</lst>
</lst>
...
Run Code Online (Sandbox Code Playgroud)
现在,以下代码将String输出到XML文件中.
try {
System.out.println("Writing xmlString to xml file");
File file = new File("xmlString.xml");
// if file doesnt exists, then create it
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(xmlString);
bw.close();
System.out.println("Done writing file");
} catch (IOException e) {
e.printStackTrace();
} …
Run Code Online (Sandbox Code Playgroud) 我知道 HTTP 是一种无状态协议。但是对于 HTTP 协议的无状态没有正确的解释。为什么 HTTP 协议是无状态的?当 HTTP 协议有状态时会发生什么?