Protocol

协议声明任何类都可以选择实现的编程接口。协议使得两个通过继承而远近相关的类可以相互通信以实现某个目标。因此,它们提供了一种替代子类化的方法。任何可以提供对其他类有用的行为的类都可以声明一个编程接口,以匿名方式提供该行为。任何其他类都可以选择采用协议并实现其一个或多个方法,从而利用该行为。如果协议采纳者实现了协议中的方法,则声明协议的类将调用这些方法。

其实OC中的Protocol跟Java中的Interface是非常相似的。

Formal and Informal Protocols

有正式和非正式两种:

  • 一个正式的协议声明了客户classes期望实现的方法列表。正式协议有自己的声明、adoption和类型检查语法。可以使用@required和@optional关键字指定实现为必需或可选的方法。子类继承其祖先采用的形式协议。正式协议也可以采用其他协议。形式协议是Objective-C语言的扩展。
  • 非正式协议是关于NSObject的一个category,它隐含地使几乎所有对象都采用该协议。(category是一种语言特性,它使您能够向类中添加方法而不必将其子类化。)在非正式协议中实现这些方法是可选的。在调用方法之前,调用对象检查目标对象是否实现了它。在Objective-c2.0中引入可选协议方法之前,非正式协议对于Foundation和AppKit类实现委托的方式至关重要。

Adopting and Conforming to a Formal Protocol

类可以声明采用正式协议,也可以从超类继承采用。采用语法在类的@interface声明中使用尖括号。在下面的示例中,CAAnimation类将其超类声明为NSObject,然后正式采用三种协议。

@interface CAAnimation : NSObject <NSCopying, CAMediaTiming, CAAction>

如果一个类采用了一个协议或继承了另一个采用该协议的类,则该类及其任何实例都被称为符合正式协议。与协议的一致性还意味着类实现了协议的所有必需方法。您可以在运行时通过发送conformsToProtocol:message来确定对象是否符合协议。

Working with Protocols

在现实世界中,公务人员在处理某些情况时往往需要遵循严格的程序。例如,执法人员在进行调查或收集证据时,必须“遵守协议”。
在面向对象编程的世界中,能够定义一组对象在给定情况下预期的行为是很重要的。例如,表视图希望能够与数据源对象通信,以便找出需要显示的内容。这意味着数据源必须响应表视图可能发送的一组特定消息。

数据源可以是任何类的实例,例如视图控制器(在OS X上是NSViewController的子类,在iOS上是UIViewController的子类)或者可能只是从NSObject继承的专用数据源类。为了让表视图知道对象是否适合作为数据源,必须能够声明该对象实现了必要的方法。

Objective-C允许您定义协议,这些协议声明特定情况下预期使用的方法。本章描述了定义正式协议的语法,并解释了如何将类接口标记为符合协议,这意味着类必须实现所需的方法。

Protocols Define Messaging Contracts

类接口声明与该类关联的方法和属性。相反,协议用于声明独立于任何特定类的方法和属性。

定义协议的基本语法如下:

@protocol ProtocolName
// list of methods and properties
@end

协议可以包括实例方法和类方法以及属性的声明。例如,考虑一个用于显示饼图的自定义视图类,如图5-1所示。

为了使视图尽可能地可重用,关于信息的所有决策都应该留给另一个对象,即数据源。这意味着同一视图类的多个实例可以通过与不同的源通信来显示不同的信息。

饼图视图所需的最少信息包括段的数量、每个段的相对大小以及每个段的标题。因此,饼图的数据源协议可能如下所示:

@protocol XYZPieChartViewDataSource
- (NSUInteger)numberOfSegments;
- (CGFloat)sizeOfSegmentAtIndex:(NSUInteger)segmentIndex;
- (NSString *)titleForSegmentAtIndex:(NSUInteger)segmentIndex;
@end

注意:此协议将NSUInteger值用于无符号整数标量值。下一章将更详细地讨论这种类型。

饼图视图类接口需要一个属性来跟踪数据源对象。这个对象可以是任何类,所以基本属性类型将是id。关于这个对象唯一已知的就是它符合相关协议。声明视图的数据源属性的语法如下所示:

@interface XYZPieChartView : UIView
@property (weak) id <XYZPieChartViewDataSource> dataSource;
...
@end

Objective-C使用尖括号表示与协议的一致性。此示例为符合XYZPieChartViewDataSource协议的通用对象指针声明弱属性。

通过在属性上指定所需的协议一致性,如果试图将属性设置为不符合协议的对象,即使基本属性类类型是泛型的,也会收到编译器警告。对象是UIViewController还是NSObject的实例并不重要。重要的是它符合协议,这意味着饼图视图知道它可以请求它需要的信息。

Protocols Can Have Optional Methods

默认情况下,协议中声明的所有方法都是必需的方法。这意味着任何符合协议的类都必须实现这些方法。

也可以在协议中指定optional方法。如果只需要一个类就可以实现这些方法。

例如,您可能决定饼图上的标题应该是可选的。如果数据源对象未实现titleForSegmentAtIndex:,则视图中不应显示标题。

可以使用@optional指令将协议方法标记为可选,如下所示:

@protocol XYZPieChartViewDataSource
- (NSUInteger)numberOfSegments;
- (CGFloat)sizeOfSegmentAtIndex:(NSUInteger)segmentIndex;
@optional
- (NSString *)titleForSegmentAtIndex:(NSUInteger)segmentIndex;
@end

在本例中,只有titleForSegmentAtIndex:方法被标记为可选。前面的方法没有指令,因此假定是必需的。@optional指令应用于它后面的任何方法,或者直到协议定义结束,或者直到遇到另一个指令,如@required。您可以向协议中添加其他方法,如下所示:

@protocol XYZPieChartViewDataSource
- (NSUInteger)numberOfSegments;
- (CGFloat)sizeOfSegmentAtIndex:(NSUInteger)segmentIndex;
@optional
- (NSString *)titleForSegmentAtIndex:(NSUInteger)segmentIndex;
- (BOOL)shouldExplodeSegmentAtIndex:(NSUInteger)segmentIndex;
@required
- (UIColor *)colorForSegmentAtIndex:(NSUInteger)segmentIndex;
@end

Check that Optional Methods Are Implemented at Runtime

如果协议中的某个方法标记为可选,则在尝试调用该方法之前,必须检查该对象是否实现了该方法。例如,饼图视图可以测试段标题方法,如下所示:

NSString *thisSegmentTitle;if ([self.dataSource respondsToSelector:@selector(titleForSegmentAtIndex:)]) {thisSegmentTitle = [self.dataSource titleForSegmentAtIndex:index];}

respondsToSelector:方法使用选择器,它是指编译后方法的标识符。通过使用@selector()指令并指定方法的名称,可以提供正确的标识符。

如果本例中的数据源实现了该方法,则使用标题;否则,标题保持为零。

记住:局部对象变量会自动初始化为nil

如果您试图在符合上面定义的协议的id上调用respondsToSelector:方法,您将得到一个编译器错误,即没有已知的实例方法。一旦您用协议限定了一个id,所有静态类型检查都会返回;如果您试图调用任何未在指定协议中定义的方法,就会得到一个错误。避免编译器错误的一种方法是将自定义协议设置为采用NSObject协议。

Protocols Inherit from Other Protocols

当我们在使用portocol的时候,可以从别的protocol来继承相应的文件。与Objective-C类可以从超类继承一样,您也可以指定一个协议与另一个协议一致。例如,最好将协议定义为符合NSObject协议(一些NSObject行为从其类接口分离到一个单独的协议;NSObject类采用NSObject协议)。

通过指明您自己的协议符合NSObject协议,您表示采用定制协议的任何对象也将为每个NSObject协议方法提供实现。因为您可能正在使用NSObject的某些子类,所以不必担心为这些NSObject方法提供自己的实现。然而,对于上述情况,采用议定书是有用的。

要指定一个协议与另一个协议一致,请在尖括号中提供另一个协议的名称,如下所示:

@protocol MyProtocol <NSObject>
...
@end

在这个例子中,采用MyProtocol的任何对象也有效地采用了NSObject协议中声明的所有方法。

Conforming To Protocol

表示类采用协议的语法再次使用尖括号,如下所示

@interface MyClass : NSObject <MyProtocol>
...
@end

这意味着MyClass的任何实例都将不仅响应接口中特别声明的方法,而且MyClass还提供MyProtocol中所需方法的实现。不需要在类接口中重新声明协议方法,采用协议就足够了。

注意:编译器不会自动合成采用的协议中声明的属性。

如果需要一个类采用多个协议,可以将它们指定为逗号分隔列表,如下所示:

@interface MyClass : NSObject <MyProtocol, AnotherProtocol, YetAnotherProtocol>
...
@end

提示:如果您发现自己在一个类中采用了大量的协议,这可能表明您需要通过将必要的行为拆分到多个较小的类(每个类都有明确定义的职责)来重构过于复杂的类。
对于新的OS X和iOS开发人员来说,一个相对常见的陷阱是使用单一的应用程序Protocol类来包含应用程序的大部分功能(管理底层数据结构、为多个用户界面元素提供数据以及响应手势和其他用户交互)。随着复杂性的增加,类变得更难维护。

一旦指明了与协议的一致性,该类必须至少为每个必需的协议方法提供方法实现,以及您选择的任何可选方法。如果您未能实现任何必需的方法,编译器将警告您。

注意:协议中的方法声明和其他声明一样。实现中的方法名和参数类型必须与协议中的声明匹配。

Cocoa and Cocoa Touch Define a Large Number of Protocols

Cocoa和Cocoa Touch对象在各种不同的情况下使用协议。例如,表视图类(用于OS X的NSTableView和用于iOS的UITableView)都使用数据源对象为它们提供必要的信息。两者都定义了自己的数据源协议,其使用方式与上面的xyzpiechartviewdatasourceprotocol示例基本相同。这两个表视图类还允许您设置委托对象,该对象必须再次符合相关的NSTableViewDelegate或UITableViewDelegate协议。委托负责处理用户交互,或自定义某些条目的显示。

有些协议用于指示类之间的非层次相似性。一些协议不是与特定的类需求相联系,而是与更一般的Cocoa或Cocoa-Touch通信机制相关,这些机制可能被多个不相关的类采用。

例如,许多框架模型对象(如NSArray和NSDictionary之类的集合类)支持NSCoding协议,这意味着它们可以对其属性进行编码和解码,以便作为原始数据进行存档或分发。NSCoding使得将整个对象图写到磁盘上相对容易,只要图中的每个对象都采用协议。

Protocols Are Used for Anonymity

在对象的类未知或需要隐藏的情况下,协议也很有用。例如,框架的开发人员可以选择不发布框架中某个类的接口。因为类名未知,所以框架的用户不可能直接创建该类的实例。相反,框架中的其他对象通常会被指定为返回现成的实例,如下所示:

 id utility = [frameworkObject anonymousUtility];

为了使这个anonymousUtility对象有用,框架的开发人员可以发布一个协议来揭示它的一些方法。即使没有提供原始的类接口(这意味着类保持匿名),对象仍然可以有限的方式使用:

id <XYZFrameworkUtility> utility = [frameworkObject anonymousUtility];

例如,如果您正在编写一个使用核心数据框架的iOS应用程序,那么很可能会遇到NSFetchedResultsController类。这个类的设计目的是帮助数据源对象向iosuitableview提供存储的数据,从而可以轻松地提供行数等信息。

如果您使用的表视图的内容被拆分为多个部分,您还可以向fetch results vc请求相关的节信息。NSFetchedResultsController类不是返回包含此节信息的特定类,而是返回一个符合NSFetchedResultsSectionInfo协议的匿名对象。这意味着仍然可以查询对象以获取所需的信息,例如节中的行数:

NSInteger sectionNumber = ...id <NSFetchedResultsSectionInfo> sectionInfo =[self.fetchedResultsController.sections objectAtIndex:sectionNumber];NSInteger numberOfRowsInSection = [sectionInfo numberOfObjects];

即使您不知道sectionInfo对象的类,NSFetchedResultsSectionInfo协议规定它可以响应numberOfObjects消息。

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片:

带尺寸的图片:

居中的图片:

居中并且带尺寸的图片:

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目

    • 项目

      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目 Value
电脑 $1600
手机 $12
导管 $1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列 第二列 第三列
第一列文本居中 第二列文本居右 第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPE ASCII HTML
Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
Quotes "Isn't this fun?" “Isn’t this fun?”
Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to-HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ(n)=(n−1)!∀n∈N\Gamma(n) = (n-1)!\quad\forall n\in\mathbb NΓ(n)=(n−1)!∀n∈N 是通过欧拉积分

Γ(z)=∫0∞tz−1e−tdt.\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞​tz−1e−tdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06Mon 13Mon 20已完成 进行中 计划一 计划二 现有任务Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

#mermaid-svg-DcMjLlmi52fzDS9e .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-DcMjLlmi52fzDS9e .label text{fill:#333}#mermaid-svg-DcMjLlmi52fzDS9e .node rect,#mermaid-svg-DcMjLlmi52fzDS9e .node circle,#mermaid-svg-DcMjLlmi52fzDS9e .node ellipse,#mermaid-svg-DcMjLlmi52fzDS9e .node polygon,#mermaid-svg-DcMjLlmi52fzDS9e .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-DcMjLlmi52fzDS9e .node .label{text-align:center;fill:#333}#mermaid-svg-DcMjLlmi52fzDS9e .node.clickable{cursor:pointer}#mermaid-svg-DcMjLlmi52fzDS9e .arrowheadPath{fill:#333}#mermaid-svg-DcMjLlmi52fzDS9e .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-DcMjLlmi52fzDS9e .flowchart-link{stroke:#333;fill:none}#mermaid-svg-DcMjLlmi52fzDS9e .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-DcMjLlmi52fzDS9e .edgeLabel rect{opacity:0.9}#mermaid-svg-DcMjLlmi52fzDS9e .edgeLabel span{color:#333}#mermaid-svg-DcMjLlmi52fzDS9e .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-DcMjLlmi52fzDS9e .cluster text{fill:#333}#mermaid-svg-DcMjLlmi52fzDS9e div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-DcMjLlmi52fzDS9e .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-DcMjLlmi52fzDS9e text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-DcMjLlmi52fzDS9e .actor-line{stroke:grey}#mermaid-svg-DcMjLlmi52fzDS9e .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-DcMjLlmi52fzDS9e .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-DcMjLlmi52fzDS9e #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-DcMjLlmi52fzDS9e .sequenceNumber{fill:#fff}#mermaid-svg-DcMjLlmi52fzDS9e #sequencenumber{fill:#333}#mermaid-svg-DcMjLlmi52fzDS9e #crosshead path{fill:#333;stroke:#333}#mermaid-svg-DcMjLlmi52fzDS9e .messageText{fill:#333;stroke:#333}#mermaid-svg-DcMjLlmi52fzDS9e .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-DcMjLlmi52fzDS9e .labelText,#mermaid-svg-DcMjLlmi52fzDS9e .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-DcMjLlmi52fzDS9e .loopText,#mermaid-svg-DcMjLlmi52fzDS9e .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-DcMjLlmi52fzDS9e .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-DcMjLlmi52fzDS9e .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-DcMjLlmi52fzDS9e .noteText,#mermaid-svg-DcMjLlmi52fzDS9e .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-DcMjLlmi52fzDS9e .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-DcMjLlmi52fzDS9e .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-DcMjLlmi52fzDS9e .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-DcMjLlmi52fzDS9e .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-DcMjLlmi52fzDS9e .section{stroke:none;opacity:0.2}#mermaid-svg-DcMjLlmi52fzDS9e .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-DcMjLlmi52fzDS9e .section2{fill:#fff400}#mermaid-svg-DcMjLlmi52fzDS9e .section1,#mermaid-svg-DcMjLlmi52fzDS9e .section3{fill:#fff;opacity:0.2}#mermaid-svg-DcMjLlmi52fzDS9e .sectionTitle0{fill:#333}#mermaid-svg-DcMjLlmi52fzDS9e .sectionTitle1{fill:#333}#mermaid-svg-DcMjLlmi52fzDS9e .sectionTitle2{fill:#333}#mermaid-svg-DcMjLlmi52fzDS9e .sectionTitle3{fill:#333}#mermaid-svg-DcMjLlmi52fzDS9e .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-DcMjLlmi52fzDS9e .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-DcMjLlmi52fzDS9e .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-DcMjLlmi52fzDS9e .grid path{stroke-width:0}#mermaid-svg-DcMjLlmi52fzDS9e .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-DcMjLlmi52fzDS9e .task{stroke-width:2}#mermaid-svg-DcMjLlmi52fzDS9e .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-DcMjLlmi52fzDS9e .taskText:not([font-size]){font-size:11px}#mermaid-svg-DcMjLlmi52fzDS9e .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-DcMjLlmi52fzDS9e .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-DcMjLlmi52fzDS9e .task.clickable{cursor:pointer}#mermaid-svg-DcMjLlmi52fzDS9e .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-DcMjLlmi52fzDS9e .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-DcMjLlmi52fzDS9e .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-DcMjLlmi52fzDS9e .taskText0,#mermaid-svg-DcMjLlmi52fzDS9e .taskText1,#mermaid-svg-DcMjLlmi52fzDS9e .taskText2,#mermaid-svg-DcMjLlmi52fzDS9e .taskText3{fill:#fff}#mermaid-svg-DcMjLlmi52fzDS9e .task0,#mermaid-svg-DcMjLlmi52fzDS9e .task1,#mermaid-svg-DcMjLlmi52fzDS9e .task2,#mermaid-svg-DcMjLlmi52fzDS9e .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-DcMjLlmi52fzDS9e .taskTextOutside0,#mermaid-svg-DcMjLlmi52fzDS9e .taskTextOutside2{fill:#000}#mermaid-svg-DcMjLlmi52fzDS9e .taskTextOutside1,#mermaid-svg-DcMjLlmi52fzDS9e .taskTextOutside3{fill:#000}#mermaid-svg-DcMjLlmi52fzDS9e .active0,#mermaid-svg-DcMjLlmi52fzDS9e .active1,#mermaid-svg-DcMjLlmi52fzDS9e .active2,#mermaid-svg-DcMjLlmi52fzDS9e .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-DcMjLlmi52fzDS9e .activeText0,#mermaid-svg-DcMjLlmi52fzDS9e .activeText1,#mermaid-svg-DcMjLlmi52fzDS9e .activeText2,#mermaid-svg-DcMjLlmi52fzDS9e .activeText3{fill:#000 !important}#mermaid-svg-DcMjLlmi52fzDS9e .done0,#mermaid-svg-DcMjLlmi52fzDS9e .done1,#mermaid-svg-DcMjLlmi52fzDS9e .done2,#mermaid-svg-DcMjLlmi52fzDS9e .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-DcMjLlmi52fzDS9e .doneText0,#mermaid-svg-DcMjLlmi52fzDS9e .doneText1,#mermaid-svg-DcMjLlmi52fzDS9e .doneText2,#mermaid-svg-DcMjLlmi52fzDS9e .doneText3{fill:#000 !important}#mermaid-svg-DcMjLlmi52fzDS9e .crit0,#mermaid-svg-DcMjLlmi52fzDS9e .crit1,#mermaid-svg-DcMjLlmi52fzDS9e .crit2,#mermaid-svg-DcMjLlmi52fzDS9e .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-DcMjLlmi52fzDS9e .activeCrit0,#mermaid-svg-DcMjLlmi52fzDS9e .activeCrit1,#mermaid-svg-DcMjLlmi52fzDS9e .activeCrit2,#mermaid-svg-DcMjLlmi52fzDS9e .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-DcMjLlmi52fzDS9e .doneCrit0,#mermaid-svg-DcMjLlmi52fzDS9e .doneCrit1,#mermaid-svg-DcMjLlmi52fzDS9e .doneCrit2,#mermaid-svg-DcMjLlmi52fzDS9e .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-DcMjLlmi52fzDS9e .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-DcMjLlmi52fzDS9e .milestoneText{font-style:italic}#mermaid-svg-DcMjLlmi52fzDS9e .doneCritText0,#mermaid-svg-DcMjLlmi52fzDS9e .doneCritText1,#mermaid-svg-DcMjLlmi52fzDS9e .doneCritText2,#mermaid-svg-DcMjLlmi52fzDS9e .doneCritText3{fill:#000 !important}#mermaid-svg-DcMjLlmi52fzDS9e .activeCritText0,#mermaid-svg-DcMjLlmi52fzDS9e .activeCritText1,#mermaid-svg-DcMjLlmi52fzDS9e .activeCritText2,#mermaid-svg-DcMjLlmi52fzDS9e .activeCritText3{fill:#000 !important}#mermaid-svg-DcMjLlmi52fzDS9e .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-DcMjLlmi52fzDS9e g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-DcMjLlmi52fzDS9e g.classGroup text .title{font-weight:bolder}#mermaid-svg-DcMjLlmi52fzDS9e g.clickable{cursor:pointer}#mermaid-svg-DcMjLlmi52fzDS9e g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-DcMjLlmi52fzDS9e g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-DcMjLlmi52fzDS9e .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-DcMjLlmi52fzDS9e .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-DcMjLlmi52fzDS9e .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-DcMjLlmi52fzDS9e .dashed-line{stroke-dasharray:3}#mermaid-svg-DcMjLlmi52fzDS9e #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-DcMjLlmi52fzDS9e #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-DcMjLlmi52fzDS9e #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-DcMjLlmi52fzDS9e #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-DcMjLlmi52fzDS9e #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-DcMjLlmi52fzDS9e #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-DcMjLlmi52fzDS9e #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-DcMjLlmi52fzDS9e #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-DcMjLlmi52fzDS9e .commit-id,#mermaid-svg-DcMjLlmi52fzDS9e .commit-msg,#mermaid-svg-DcMjLlmi52fzDS9e .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-DcMjLlmi52fzDS9e .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-DcMjLlmi52fzDS9e .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-DcMjLlmi52fzDS9e g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-DcMjLlmi52fzDS9e g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-DcMjLlmi52fzDS9e g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-DcMjLlmi52fzDS9e g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-DcMjLlmi52fzDS9e g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-DcMjLlmi52fzDS9e g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-DcMjLlmi52fzDS9e .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-DcMjLlmi52fzDS9e .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-DcMjLlmi52fzDS9e .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-DcMjLlmi52fzDS9e .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-DcMjLlmi52fzDS9e .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-DcMjLlmi52fzDS9e .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-DcMjLlmi52fzDS9e .edgeLabel text{fill:#333}#mermaid-svg-DcMjLlmi52fzDS9e .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-DcMjLlmi52fzDS9e .node circle.state-start{fill:black;stroke:black}#mermaid-svg-DcMjLlmi52fzDS9e .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-DcMjLlmi52fzDS9e #statediagram-barbEnd{fill:#9370db}#mermaid-svg-DcMjLlmi52fzDS9e .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-DcMjLlmi52fzDS9e .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-DcMjLlmi52fzDS9e .statediagram-state .divider{stroke:#9370db}#mermaid-svg-DcMjLlmi52fzDS9e .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-DcMjLlmi52fzDS9e .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-DcMjLlmi52fzDS9e .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-DcMjLlmi52fzDS9e .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-DcMjLlmi52fzDS9e .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-DcMjLlmi52fzDS9e .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-DcMjLlmi52fzDS9e .note-edge{stroke-dasharray:5}#mermaid-svg-DcMjLlmi52fzDS9e .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-DcMjLlmi52fzDS9e .error-icon{fill:#522}#mermaid-svg-DcMjLlmi52fzDS9e .error-text{fill:#522;stroke:#522}#mermaid-svg-DcMjLlmi52fzDS9e .edge-thickness-normal{stroke-width:2px}#mermaid-svg-DcMjLlmi52fzDS9e .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-DcMjLlmi52fzDS9e .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-DcMjLlmi52fzDS9e .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-DcMjLlmi52fzDS9e .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-DcMjLlmi52fzDS9e .marker{fill:#333}#mermaid-svg-DcMjLlmi52fzDS9e .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-DcMjLlmi52fzDS9e {color: rgba(0, 0, 0, 0.75);font: normal normal normal normal 16px/25.882352828979492px -apple-system, "SF UI Text", Arial, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;}张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间, 文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五

这将产生一个流程图。:

#mermaid-svg-dLywdWVrEvS9KCyL .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-dLywdWVrEvS9KCyL .label text{fill:#333}#mermaid-svg-dLywdWVrEvS9KCyL .node rect,#mermaid-svg-dLywdWVrEvS9KCyL .node circle,#mermaid-svg-dLywdWVrEvS9KCyL .node ellipse,#mermaid-svg-dLywdWVrEvS9KCyL .node polygon,#mermaid-svg-dLywdWVrEvS9KCyL .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-dLywdWVrEvS9KCyL .node .label{text-align:center;fill:#333}#mermaid-svg-dLywdWVrEvS9KCyL .node.clickable{cursor:pointer}#mermaid-svg-dLywdWVrEvS9KCyL .arrowheadPath{fill:#333}#mermaid-svg-dLywdWVrEvS9KCyL .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-dLywdWVrEvS9KCyL .flowchart-link{stroke:#333;fill:none}#mermaid-svg-dLywdWVrEvS9KCyL .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-dLywdWVrEvS9KCyL .edgeLabel rect{opacity:0.9}#mermaid-svg-dLywdWVrEvS9KCyL .edgeLabel span{color:#333}#mermaid-svg-dLywdWVrEvS9KCyL .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-dLywdWVrEvS9KCyL .cluster text{fill:#333}#mermaid-svg-dLywdWVrEvS9KCyL div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-dLywdWVrEvS9KCyL .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-dLywdWVrEvS9KCyL text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-dLywdWVrEvS9KCyL .actor-line{stroke:grey}#mermaid-svg-dLywdWVrEvS9KCyL .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-dLywdWVrEvS9KCyL .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-dLywdWVrEvS9KCyL #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-dLywdWVrEvS9KCyL .sequenceNumber{fill:#fff}#mermaid-svg-dLywdWVrEvS9KCyL #sequencenumber{fill:#333}#mermaid-svg-dLywdWVrEvS9KCyL #crosshead path{fill:#333;stroke:#333}#mermaid-svg-dLywdWVrEvS9KCyL .messageText{fill:#333;stroke:#333}#mermaid-svg-dLywdWVrEvS9KCyL .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-dLywdWVrEvS9KCyL .labelText,#mermaid-svg-dLywdWVrEvS9KCyL .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-dLywdWVrEvS9KCyL .loopText,#mermaid-svg-dLywdWVrEvS9KCyL .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-dLywdWVrEvS9KCyL .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-dLywdWVrEvS9KCyL .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-dLywdWVrEvS9KCyL .noteText,#mermaid-svg-dLywdWVrEvS9KCyL .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-dLywdWVrEvS9KCyL .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-dLywdWVrEvS9KCyL .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-dLywdWVrEvS9KCyL .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-dLywdWVrEvS9KCyL .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dLywdWVrEvS9KCyL .section{stroke:none;opacity:0.2}#mermaid-svg-dLywdWVrEvS9KCyL .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-dLywdWVrEvS9KCyL .section2{fill:#fff400}#mermaid-svg-dLywdWVrEvS9KCyL .section1,#mermaid-svg-dLywdWVrEvS9KCyL .section3{fill:#fff;opacity:0.2}#mermaid-svg-dLywdWVrEvS9KCyL .sectionTitle0{fill:#333}#mermaid-svg-dLywdWVrEvS9KCyL .sectionTitle1{fill:#333}#mermaid-svg-dLywdWVrEvS9KCyL .sectionTitle2{fill:#333}#mermaid-svg-dLywdWVrEvS9KCyL .sectionTitle3{fill:#333}#mermaid-svg-dLywdWVrEvS9KCyL .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dLywdWVrEvS9KCyL .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-dLywdWVrEvS9KCyL .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dLywdWVrEvS9KCyL .grid path{stroke-width:0}#mermaid-svg-dLywdWVrEvS9KCyL .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-dLywdWVrEvS9KCyL .task{stroke-width:2}#mermaid-svg-dLywdWVrEvS9KCyL .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dLywdWVrEvS9KCyL .taskText:not([font-size]){font-size:11px}#mermaid-svg-dLywdWVrEvS9KCyL .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dLywdWVrEvS9KCyL .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-dLywdWVrEvS9KCyL .task.clickable{cursor:pointer}#mermaid-svg-dLywdWVrEvS9KCyL .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-dLywdWVrEvS9KCyL .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-dLywdWVrEvS9KCyL .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-dLywdWVrEvS9KCyL .taskText0,#mermaid-svg-dLywdWVrEvS9KCyL .taskText1,#mermaid-svg-dLywdWVrEvS9KCyL .taskText2,#mermaid-svg-dLywdWVrEvS9KCyL .taskText3{fill:#fff}#mermaid-svg-dLywdWVrEvS9KCyL .task0,#mermaid-svg-dLywdWVrEvS9KCyL .task1,#mermaid-svg-dLywdWVrEvS9KCyL .task2,#mermaid-svg-dLywdWVrEvS9KCyL .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-dLywdWVrEvS9KCyL .taskTextOutside0,#mermaid-svg-dLywdWVrEvS9KCyL .taskTextOutside2{fill:#000}#mermaid-svg-dLywdWVrEvS9KCyL .taskTextOutside1,#mermaid-svg-dLywdWVrEvS9KCyL .taskTextOutside3{fill:#000}#mermaid-svg-dLywdWVrEvS9KCyL .active0,#mermaid-svg-dLywdWVrEvS9KCyL .active1,#mermaid-svg-dLywdWVrEvS9KCyL .active2,#mermaid-svg-dLywdWVrEvS9KCyL .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-dLywdWVrEvS9KCyL .activeText0,#mermaid-svg-dLywdWVrEvS9KCyL .activeText1,#mermaid-svg-dLywdWVrEvS9KCyL .activeText2,#mermaid-svg-dLywdWVrEvS9KCyL .activeText3{fill:#000 !important}#mermaid-svg-dLywdWVrEvS9KCyL .done0,#mermaid-svg-dLywdWVrEvS9KCyL .done1,#mermaid-svg-dLywdWVrEvS9KCyL .done2,#mermaid-svg-dLywdWVrEvS9KCyL .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-dLywdWVrEvS9KCyL .doneText0,#mermaid-svg-dLywdWVrEvS9KCyL .doneText1,#mermaid-svg-dLywdWVrEvS9KCyL .doneText2,#mermaid-svg-dLywdWVrEvS9KCyL .doneText3{fill:#000 !important}#mermaid-svg-dLywdWVrEvS9KCyL .crit0,#mermaid-svg-dLywdWVrEvS9KCyL .crit1,#mermaid-svg-dLywdWVrEvS9KCyL .crit2,#mermaid-svg-dLywdWVrEvS9KCyL .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-dLywdWVrEvS9KCyL .activeCrit0,#mermaid-svg-dLywdWVrEvS9KCyL .activeCrit1,#mermaid-svg-dLywdWVrEvS9KCyL .activeCrit2,#mermaid-svg-dLywdWVrEvS9KCyL .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-dLywdWVrEvS9KCyL .doneCrit0,#mermaid-svg-dLywdWVrEvS9KCyL .doneCrit1,#mermaid-svg-dLywdWVrEvS9KCyL .doneCrit2,#mermaid-svg-dLywdWVrEvS9KCyL .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-dLywdWVrEvS9KCyL .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-dLywdWVrEvS9KCyL .milestoneText{font-style:italic}#mermaid-svg-dLywdWVrEvS9KCyL .doneCritText0,#mermaid-svg-dLywdWVrEvS9KCyL .doneCritText1,#mermaid-svg-dLywdWVrEvS9KCyL .doneCritText2,#mermaid-svg-dLywdWVrEvS9KCyL .doneCritText3{fill:#000 !important}#mermaid-svg-dLywdWVrEvS9KCyL .activeCritText0,#mermaid-svg-dLywdWVrEvS9KCyL .activeCritText1,#mermaid-svg-dLywdWVrEvS9KCyL .activeCritText2,#mermaid-svg-dLywdWVrEvS9KCyL .activeCritText3{fill:#000 !important}#mermaid-svg-dLywdWVrEvS9KCyL .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dLywdWVrEvS9KCyL g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-dLywdWVrEvS9KCyL g.classGroup text .title{font-weight:bolder}#mermaid-svg-dLywdWVrEvS9KCyL g.clickable{cursor:pointer}#mermaid-svg-dLywdWVrEvS9KCyL g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-dLywdWVrEvS9KCyL g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-dLywdWVrEvS9KCyL .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-dLywdWVrEvS9KCyL .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-dLywdWVrEvS9KCyL .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-dLywdWVrEvS9KCyL .dashed-line{stroke-dasharray:3}#mermaid-svg-dLywdWVrEvS9KCyL #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-dLywdWVrEvS9KCyL #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-dLywdWVrEvS9KCyL #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-dLywdWVrEvS9KCyL #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-dLywdWVrEvS9KCyL #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-dLywdWVrEvS9KCyL #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-dLywdWVrEvS9KCyL #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-dLywdWVrEvS9KCyL #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-dLywdWVrEvS9KCyL .commit-id,#mermaid-svg-dLywdWVrEvS9KCyL .commit-msg,#mermaid-svg-dLywdWVrEvS9KCyL .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dLywdWVrEvS9KCyL .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dLywdWVrEvS9KCyL .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dLywdWVrEvS9KCyL g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dLywdWVrEvS9KCyL g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-dLywdWVrEvS9KCyL g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-dLywdWVrEvS9KCyL g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-dLywdWVrEvS9KCyL g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-dLywdWVrEvS9KCyL g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-dLywdWVrEvS9KCyL .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-dLywdWVrEvS9KCyL .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-dLywdWVrEvS9KCyL .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-dLywdWVrEvS9KCyL .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-dLywdWVrEvS9KCyL .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-dLywdWVrEvS9KCyL .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-dLywdWVrEvS9KCyL .edgeLabel text{fill:#333}#mermaid-svg-dLywdWVrEvS9KCyL .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dLywdWVrEvS9KCyL .node circle.state-start{fill:black;stroke:black}#mermaid-svg-dLywdWVrEvS9KCyL .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-dLywdWVrEvS9KCyL #statediagram-barbEnd{fill:#9370db}#mermaid-svg-dLywdWVrEvS9KCyL .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-dLywdWVrEvS9KCyL .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-dLywdWVrEvS9KCyL .statediagram-state .divider{stroke:#9370db}#mermaid-svg-dLywdWVrEvS9KCyL .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-dLywdWVrEvS9KCyL .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-dLywdWVrEvS9KCyL .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-dLywdWVrEvS9KCyL .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-dLywdWVrEvS9KCyL .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-dLywdWVrEvS9KCyL .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-dLywdWVrEvS9KCyL .note-edge{stroke-dasharray:5}#mermaid-svg-dLywdWVrEvS9KCyL .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-dLywdWVrEvS9KCyL .error-icon{fill:#522}#mermaid-svg-dLywdWVrEvS9KCyL .error-text{fill:#522;stroke:#522}#mermaid-svg-dLywdWVrEvS9KCyL .edge-thickness-normal{stroke-width:2px}#mermaid-svg-dLywdWVrEvS9KCyL .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-dLywdWVrEvS9KCyL .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-dLywdWVrEvS9KCyL .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-dLywdWVrEvS9KCyL .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-dLywdWVrEvS9KCyL .marker{fill:#333}#mermaid-svg-dLywdWVrEvS9KCyL .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-dLywdWVrEvS9KCyL {color: rgba(0, 0, 0, 0.75);font: normal normal normal normal 16px/25.882352828979492px -apple-system, "SF UI Text", Arial, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;}

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.2.0开始我的操作确认?结束yesno
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

OC Protocol(待续)相关推荐

  1. OC学习 第九节 代理协议

    day9 代理和协议 ================ 代理设计模式 比如工人工作,要求发工资,他自己不能给他自己发工资,由老板发工资,老板在这里就是工人的代理 比如工人工作之后,老板要发工资,老板对 ...

  2. Objective-C:代理

    说到Objective-C的代理,就不得不先讲一下协议--@protocol. 什么是协议 - protocol 协议,顾名思义,就是要所要遵循的一些规则.在协议中声明一组方法,在需要的时候实现具体操 ...

  3. OC中protocol、category和继承的区别

    利用继承,多态是一个很好的保持"对扩展开放.对更改封闭"(OCP)的办法,也是最常见的一种方法.Objective C还支持另外两种语法来支持OCP:Protocol和Catego ...

  4. OC加强(三)之protocol(协议)/代理

    1.protocol概念以及基本使用 1.protocol的使用注意 OC中的协议(protocol)使用注意: 1)Protocol:就一个用途,用来声明一大堆的方法(不能声明成员变量),不能写实现 ...

  5. OC之protocol监听器的实现

    画图 图解 代码 总结 一.画图 本人画了一个图(字体和画图水平请忽略) 二.图解 1.首先我们上边是一个按钮的类,按钮当中包括了一条线,这个线是什么呢? 其实难理解就难理解到这条线上了 1⃣️这条线 ...

  6. 转载 iOS js oc相互调用(JavaScriptCore) --iOS调用js

    iOS js oc相互调用(JavaScriptCore) 从iOS7开始 苹果公布了JavaScriptCore.framework 它使得JS与OC的交互更加方便了. 下面我们就简单了解一下这个框 ...

  7. 5 OC 中的三种对象

    目录 OC 中对象的分类 一  instance 对象 二 类对象 三  元类对象 总结: OC 中对象的分类 instance 对象 类对象 元类对象 一  instance 对象 内存中包含哪些信 ...

  8. OC 的反射机制以及使用场景

    OC 的反射机制 一 定义概念 普遍的概念就是类似于java的反射机制,动态机制使得OC语言更加灵活. 反射机制就是可以根据指定的类名获取类的相关信息. 二 作用 1 根据类名获得class // 选 ...

  9. OC与Swift封装网络工具类

    2019独角兽企业重金招聘Python工程师标准>>> AFNetworking ATS 设置 <key>NSAppTransportSecurity</key&g ...

最新文章

  1. LeetCode实战:Nim 游戏
  2. 实战:掌握PyTorch图片分类的简明教程 | 附完整代码
  3. ZooKeeper客户端ZKClient使用
  4. ADMM:交替方向乘子算法
  5. 编程之美-求数组的子数组之和的最大值方法整理
  6. .NET Core 2.1 正式发布
  7. lisp正负调换_lisp中如何把符号转换为字符串
  8. 点击home键_iPhone小技巧:无Home键iPhone11如何强制重启?
  9. cp分解实现_对标Eureka的AP一致性,Nacos如何实现Raft算法
  10. 软考路:2021年系统架构设计师之流水账
  11. Spring Boot学习总结(2)——Spring Boot整合Jsp
  12. 福建省队集训被虐记——DAY3
  13. Novel 网络小说点评
  14. 进化算法的产生与发展
  15. 多步攻击场景构建和攻击链提取方法
  16. 如何获取未安装apk应用的包名、应用名以及版本信息等
  17. (附源码)ssm航空客运订票系统 毕业设计 141612
  18. Unity3D Shader 新手教程(1/6)
  19. postgresSQL的FDE加密
  20. 【转载】专利翻译常用词句

热门文章

  1. 智能家居创意产品一智能插座
  2. c语言自动输入一位数字,c语言:要求输入一个四位整数,然后将各位数字按英文输出...
  3. KTV点歌系统数据库设计文档
  4. 量子计算机基本信息单位,单粒子的量子态可作为存储最基本单位
  5. 【数学问题2】向量微分
  6. 存token的最佳方式
  7. Android p刷机红米4a,红米4A(Redmi 4A 全网通)刷机教程,简单几步搞定刷机
  8. msi笔记本u盘装linux,微星msi电脑重装系统_微星笔记本一键U盘重装系统教程图解...
  9. 因增强导致BDC录屏执行异常的梗
  10. 解决升级Flutter3.0后出现警告Operand of null-aware operation ‘!‘ has type ‘WidgetsBinding‘ which excludes null