丈夫的审美也开始在扭转。虽然 mutex 和 critical section如果case没有含枚举中有的价值。

01

Win32 的 Mutex 用途与 critical section
非常接近,但是她牺牲速度为增弹性。或许你都猜到了,mutex 是 MUTual
EXclusion 的缩写。一个日子内就能够有一个线程拥有
mutex,就象是同一时间内只能够来一个线程进入和一个 critical section
一样。
虽 mutex 和 critical section
做相同的工作,但是她的运行还是产生出入的:

/*

图片 1

      锁住一个免为有着的 mutex,比锁住一个请勿吃抱有的 critical
section,需要花费几乎 100 倍之光阴。因为 critical section
不欲进入操作系统核心,直接在“user
mode”就得拓展操作。(译注:作者这里所谓的“usermode”,是对立于 Windows
NT 的“kernel mode”而言。至于 Windows 95 底下,没有所谓“user
mode”这个名词或观念,应该是据 ring3 层次。)
   Mutexes 可以跨进程使。Critical section
则光会在跟一个历程遭到行使。
  等待一个 mutex 时,你可以指定“结束等待”的日子长。但对此critical
section 则颇。
  以下是少数种植对象的连锁函数比较:

 Swift枚举:

当我要同叫作有点鲜肉的当儿,我认为那些成熟之老婆就是像谜一样黑。

CRITICAL_SECTION                Mutex 核心目标
InitializeCriticalSection()              CreateMutex()
                              OpenMutex()

 Swift中之枚举比OC中的枚举强大, 因为Swift中之枚举是一等类型,
它好像类和结构体一样多属性和道

当自身渐渐走向老鲜肉的时光,我突然意识了扳平种植新的社会常理:男人不再像以前那么钟情于年轻貌美的童女。

EnterCriticalSection()                 WaitForSingleObject()
                              WaitForMultipleObjects()
                              MsgWaitForMultipleObjects()

 格式:

时之熊熊变动,男人的审美也开始在扭转。

LeaveCriticalSection()               ReleaseMutex()
DeleteCriticalSection()               CloseHandle()

 enum Method{

兴许大多数夫谈恋爱要愿意找脸蛋嫩、身材好、年龄稍的女生,但当自家屡屡在座性格色彩的栽培后,见到最多单身还是已婚的30载上下女青年,感觉他们还无比尽如人意,一点为看不到岁月在他们身上留鲜明的印痕,皮肤还紧致,身材还是姣好,而且比小姑娘们更多矣平等份知性和成熟。

 

 case 枚举值

图片 2

为能过进程使以及一个 mutex,你可以在发生 mutex
时指定其名目。如果您指定了名,系统被的其余任何线程就得采用是称呼来处理
mutex。一定要是动用名称,因为您莫辙将 handle 交给一个实践着之进程。
牢记,其他程序吗可能以这合伙机制,所以 mutex
名称对总体体系而言是全局性的。不要拿你的 mutex
对象命名吧“Object”或“Mutex”之类,那不过过大。请动一些独一无二的称号,如企业称或应用程序名称等等。

 }

起正在天籁之音的专业级主持人、公益行者李赛男先生▲

来一个互斥器(Mutex)

 */

图片 3

同critical sections 不同,当你发出一个 mutex 时,你生出某些选择空间。Mutex
是一个核心目标,因此她叫保障以系统核心之中,并且和另基本目标同,有所谓的援计数(reference
count)。虽然 mutex 的意义和 critical section 十分类,但鉴于 Win32
术语带来的迷惑,mutex 可能不坏容易了解。
您可以 CreateMutex() 产生一个 mutex:
HANDLE CreateMutex(
    LPSECURITY_ATTRIBUTES lpMutexAttributes,
    BOOL bInitialOwner,
    LPCTSTR lpName
);
参数
    lpMutexAttributes     安全性能。NULL 表示用默认的性。这无异于指定在
Windows 95 中没用。
    bInitialOwner         如果你要“调用 CreateMutex()
的斯线程”拥有产生出的 mutex,就以之值设为 TRUE。
    lpName             mutex
的称呼(一个字符串)。任何进程或线程都得根据这称呼使用就无异
mutex。名称可以是任意字符串,只要不含有反斜线(backslash,\)即可。
返回值
    如果成功,则传出一个 handle,否则传回 NULL。调用 GetLastError()
可以抱更进一步的音。如果指定的 mutex 名称都有,GetLastError()
会传回 ERROR_ALREADY_EXISTS。

 

同套霸气之企业家网红、创业导师郭姝含先生▲

当您不再要一个 mutex 时,你可调用 CloseHandle()
将其倒闭。和其他中心目标同,mutex 有一个引用计数(reference
count)。每次你调用CloseHandle(),引用计数便减 1。当引用计数达到0
时,mutex 就自行为网清除掉。下面是 CreateAndDeleteMutex()
函数会事先出一个 mutex 然后把她去。这个 mutex
没有安全性能,不属于今日线程,名也“Demonstration Mutex”。
HANDLE hMutex;
void CreateAndDeleteMutex()
{
    hMutex = CreateMutex(NULL, FALSE, “Demonstration Mutex”);
        /* Do something here */
    CloseHandle(hMutex);
}

enum Method {

图片 4

开辟一个互斥器(Mutex)

    case Add

图片 5

  如果 mutex
已经为来了,并有一个称呼,那么其它其他的进程和线程便足以因拖欠名打开那个
mutex(我这里连无考虑安全性能)。
  如果您调用 CreateMutex() 并指定一个既有的 mutex
名称,Win32碰头扭曲给您一个 mutex handle,而休见面吗你产生一个初的
mutex。就如面所说的,GetLastError() 会传回 ERROR_ALREADY_EXISTS。
乃也可行使 OpenMutex() 打开(而不有)一个原来已在的
mutex。这种情景便是以,你写了一个 client 进程,并同同等台机器上的
server 进程交谈,而只有 server 进程才当来 mutex,因为它保护了 server
所定义之结构体。
至于 OpenMutex(),请参见 Win32 Programmer’s Reference。你啊得以
Visual C++ 的联机帮助文件被找到相关材料。

    case Sub

图片 6

 

    case Mul

图片 7

锁住一个互斥器(Mutex)

    case Div

课堂上亦然生波智慧女神来袭,你可知看得出她们的实际年龄么?▲

  欲获得一个 mutex 的拥有权,请动 Win32 的 Wait…()
函数。Wait…()对 mutex 所召开的事情以及 EnterCriticalSection() 对 critical
section 所开的事体多,倒是一坏堆术语容易把您迷惑了。
若是没有其余线程拥有 mutex,这个 mutex
便处在激发状态。因此,如果没有外线程拥有好 mutex,Wait…()
便会中标。反过来说,当线程拥有mutex
时,它就是不处于激发状态。如果产生有线程正在等候一个无为鼓舞的mutex,它就是将登“blocking”(阻塞)状态。也就是说,该线程会停止实施,直到
mutex 被其拥有者释放并处于激发状态。

    //可以连在一起写

从外在看,淑女更了解穿衣打扮化妆,她们得以妩媚、可以风情万种植、也可以青春活力,她们明白以应酬场合如何优雅地滋生他人的关心。

下是某种情节的提高:
    1. 咱们来一个
mutex,此时从不其他线程拥有她,也就是说,它地处非激发状态(译注)。
    2. 某某线程调用 WaitForSingleObject()(或其它其它的 Wait…()
函数),并点名该 mutex handle 为参数。
    3. Win32 于是用该 mutex 的拥有权给予这个线程,然后拿此 mutex
的状态短暂地设为激发状态,于是 Wait…() 函数回。
    4. Mutex
这又吃设定为不激发状态,使任何处于等候状态下的其余线程没有章程得到该拥有权。
    5. 获取该 mutex 之线程调用 ReleaseMutex(),将 mutex
释放掉。于是循环回到第一光景,周而复始。

//    case Add, Sub, Mul, Div

由内在押,淑女经济独立,思想独立,能力可以,有希望有追,不按照附于任何人,有着强大的私有魅力及影响力,她们能十分好掌控自己之人生。

  译注
我怀念你大易让作者的齐同样段落文字迷惑,因为其的首先沾以及还前方同一段子文字被的“一旦没有外线程拥有
mutex,这个 mutex
便处在激发状态”有硌背道而驰。基本上,或许再也小巧地说,所谓的“mutex
激发状态”应该是:当没另外线程拥有该 mutex 而且产生一个线程正缘 Wait…()
等待该 mutex,该mutex 就会短地面世激发状态,使 Wait…() 得以回到。
ReleaseMutex() 的格如下:
BOOL ReleaseMutex(
    HANDLE hMutex
);
参数
    hMutex         欲放的 mutex 的 handle。
返回值
    如果成功,传回 TRUE。如果失败,传回 FALSE。

}

以上两沾就是是本身当30载以上成熟淑女越来越被丈夫们追逐的关键原由。

Mutex 的有所权是第二只易逗人迷惑的地方。Mutex
的拥有权并非属于挺起它的线程,而是那个最后对这 mutex 进行 Wait…()
操作而没有开展 ReleaseMutex() 操作的线程。线程拥有 mutex
就接近线程进入 critical section 一样。一软只能有一个线程拥有该 mutex。
Mutex 的让损毁和该拥有权没有呀关联。和多数外的核心目标同,mutex
是于那引用计数降呢 0 时给操作系统摧毁的。每当线程对斯 mutex 调用同一糟糕
CloseHandle(),或是当线程结束时,mutex 的援计数即降 1。
设若具有某 mutex 之线程结束了,该 mutex
会被机关清除的绝无仅有情况是:此线程是最后一个以及该 mutex handle
有关系的线程。否则是基本目标的援计数仍然是较 0
大,其他线程(以及经过)仍然可以享有这个 mutex
的合法handle。然而,当线程结束而从未自由某个 mutex
时,有同样种植特有之处理方式。

 

02

拍卖给放弃的互斥器(Mutexes)

// 可以使枚举类型变量或者常量接收枚举值

今天先给大家隆重认识下三各风格截然不同的淑女,也是3月25-3月26日深圳《性格色彩读心术》的老三员名师,皆已婚,年龄在30-40之内,她们由带光芒,大批例外年龄段男粉丝(含小鲜肉、老鲜肉、老腊肉、老男人等)紧密地围于他们身边。

  于一个得体的次中,线程绝对免应以它们将终结前还备一个mutex,因为这意味着线程没有能适合地排除其资源。不幸地是,我们并无身处在一个健全的世界,有时候,因为某种理由,线程可能没于收尾前调用ReleaseMutex()。为了化解之题目,mutex
有一个雅重要的特征。这性质在各种同步机制面临是绝无仅有的。
倘线程拥有一个
mutex 而于竣工前从未有过调用 ReleaseMutex(),mutex
不见面为损毁。取而代之的是,该 mutex 会被视为“ 未为有” 以及“ 未吃激发”
, 而下一个候中的线程会给以WAIT_ABANDONED_0 通知。不论线程是盖
ExitThread() 而得了,或是因当掉而结束,这种状况都是。
  如果其他线程正缘 WaitForMultipleObjects() 等待这
mutex,该函数也会返回,传回值介于 WAIT_ABANDONED_0 和
(WAIT_ABANDONED_0_n +1)之间,其中的 n 是负handle
数组的要素个数。线程可以依据此价值了解及究竟哪一个 mutex 被放弃了。至于
WaitForSingleObject() , 则仅是传染回WAIT_ABANDONED_0。
  “知道一个 mutex
被放弃”是相同项简单的作业,但万一明了怎么样回答可即使较不方便了。毕竟 mutex
是为此来管某些操作会自行为进行的,如果线程死为半路,很有或受保安之那些数据会遭到无法修复的残害。

var m:Method = .Add

率先员是钱永静先生,是深圳性格色彩学院之院长。

被哲学家们吃饭

print(m)

图片 8

  让我们回头再看看哲学家进餐问题。在范例程序 DINING
中起相同组mutexes 用来代表那些筷子。产生 mutexes 的先后操作像这么:
      for (i=0; i<PHILOSOPHERS; i++)
          gChopStick[i] = CreateMutex(NULL, FALSE, NULL);
  CreateMutex() 的参数告诉我们,这些 mutexes
的平安性能采用缺省值,没有起来拥有者,也从不名称。每一样出筷子来一个 mutex
对承诺的。我们所以采取非签约的
mutexes,为之凡筷子数组是大局数据,每一个线程都能够存取它。
  就像 critical sections 一样,mutexes
用来维护资源。在存取一个受保障的资源时,你的程序代码必须接受 mutex
的拥有权——藉由调用 Wait…() 函数获得。
  哲学家们可采取 WaitForSingleObject()
来等待就餐,但那可是即便如critical section
一样了(同时为带一样之死锁问题)。他们为堪行使WaitForMultipleObjects()
来等待,于是可以修正为 EnterCriticalSection() 和WaitForSingleObject()
而致使的死锁问题。
  实际上我们是动
WaitForMultipleObjects()来等两开发筷子。如果仅发生同一开支筷子可用,不算是得到一致“双”筷子(WaitForMultipleObjects()
也为此无会见回)。程序代码像这样:
    WaitForMultipleObjects(2, myChopsticks, TRUE, INFINITE);
  这个函数的参数告诉我们,myChopsticks 数组中发出一定量个 handles
是等目标。当其中各级一个 handle
都远在激发状态时,该函数才见面返回。它会无穷尽地等待下,没有工夫限定。
  如果您以 WaitForMultipleObjects() 的道执行 DINING
程序,你晤面发现哲学家们会不断地吃,死锁永远不会见出。

 

永静先生以前是平等称为空中小姐,曾经一度受人误认为是花瓶。

修正SwapLists

// 注意: 如果变量或者常量没有点名项目,
那么前面必须抬高该值属于哪个枚举类型

然永静不甘心,师从乐嘉先生,后正式离开了办事十大抵年的航空企业,开始创业,带在同增援以90后为主的集团,一年时创造了一个并且一个的偶发,堪称女性的师。

  我们用来解决哲学家进餐问题之技巧,也可为此来解决我们当
SwapLists()所中的题目。任何时刻如果你想锁住过一个以上之一块对象,你就发死锁的地下病因。如果总是以一如既往时间拿有目标还锁住,问题可去矣。列表4-2显新版的
SwapLists()。

var m1 = Method.Add

现之永静老师曾变为了深圳名特优女性的一模一样摆放片子,是名副其实的丽和智慧并存的女性成才导师。

列表 4-2 使用WaitForMultipleObjects() 修正 SwapLists

print(m1)

当培养课堂上,她底享受给人能力,振聋发聩。她说:

#0001 struct Node
#0002 {
#0003         struct Node *next;
#0004         int data;
#0005 };
#0006
#0007 struct List
#0008 {
#0009         struct Node *head;
#0010         HANDLE hMutex;
#0011 };
#0012
#0013 struct List *CreateList()
#0014 {
#0015         List *list = (List *)malloc(sizeof(struct List));
#0016         list->head = NULL;
#0017         list->hMutex = CreateMutex(NULL, FALSE, NULL);
#0018         return list;
#0019 }
#0020
#0021 void DeleteList(struct List *list)
#0022 {
#0023         CloseHandle(list->hMutex);
#0024         free(list);
#0025 }
#0026
#0027 void SwapLists(struct List *list, struct List *list2)
#0028 {
#0029         struct List *tmp_list;
#0030         HANDLE arrhandles[2];
#0031
#0032         arrhandles[0] = list1->hMutex;
#0033         arrhandles[1] = list2->hMutex;
#0034         WaitForMultipleObjects(2, arrHandles, TRUE, INFINITE);
#0035         tmp_list = list1->head;
#0036         list1->head = list2->head;
#0037         list2->head = tmp_list;
#0038         ReleaseMutex(arrhandles[0]);
#0039         ReleaseMutex(arrhandles[1]);
#0040 }

 

一个女人而可以得被身边的心上人成功,那朋友一定距离不开尔。

缘何来一个初期拥有者?

// 利用Switch匹配

因为其好为例,因为它们同乐嘉先生学演讲后,不断设立各种沙龙和塑造,演讲技巧日渐高超,她得以呢丈夫进行路路演并且展开员工潜能的激发。他的一直公无比支持其本所召开的扶植事业,因为看到其的缕缕成长。

  CreateMutex() 的次独参数
bInitialOwner,允许你指定现行线程(current
thread)是否及时有即将发生下的mutex。乍见之下这个参数或许只是供平等种植方便性,但实在它阻挡了千篇一律种
race condition 的发出。
  与 critical section 不同,mutexes
可以跨进程使,以及跨线程使用。Mutex
可以依据其名称而被启封。所以,另一个进程可以了不欲同发mutex
的进程打声招呼, 就冲名称被一个 mutex
。如果无bInitialOwner,你就是务须写下这样的代码:
          HANDLE hMutex = CreateMutex(NULL, FALSE, “Sample Name”);
          int result = WaitForSingleObject(hMutex, INFINITE);
  但是这样的布或会见有 race condition。如果当 CreateMutex
完成之后,发生了一个 context
switch,执行权被切换到任何一个线程,那么其他进程就生出或在 mutex
的产生者调用 WaitForSingleObject() 之前,锁住这个mutex 对象。

// 注意: 如果case中包含了有的值, 可以不写default;
如果case没有包含枚举中具备的价, 必须写default

它的先生以前从未有过会烧糖水给其喝,但现在会主动煮糖水给它们喝,说它们久讲课需要护嗓。

 

她说,当一个老婆足够好的时候,男人是乐于呢家里做出改变之。

switch (Method.Add){

其说,女人的情绪化是因未有化解问题的力量。一个人口能力不足的时段,发性就见面吃问题易得更其糟糕,而能力欠缺之早晚,唯一的改变方法就是不断上,当自身修炼提升了,很多问题虽见面解决。

case Method.Add:

钱永静先生,越活越青春,越活越帅。这样的老婆,在家会带来好孩子,安顿父母,家庭关系一致片和谐,还会也外一半出谋策划,关键是尚闹个体强大的影响力,综合技能出众,聪明的汉子当然要加倍对其吓。

    print(“加法”)

一经一个老小可以修炼到这般境地,想追她底丈夫必少不了,虽然其底春秋现在凡33东。

case Method.Sub:

亚各类教授教师是杨向会先生,性格色彩学院资深讲师。

    print(“减法”)

图片 9

case Method.Mul:

倘说,永静先生充分展示了女性窈窕坚韧的力量,而望会老师展示的刚好是其余一样种风格,她会一个人数笑得前仰后合,又足以给一个人擅自潸然泪下。

    print(“除法”)

乐嘉先生对通往会老师的评价是,是人性色彩学院唯一一各类可给学员又哭又笑的红讲师,并且成功完成了化腐朽为神奇。

case Method.Div:

往会老师的人生充满了传奇,听其讲述自己童年底经历,就是以听恐怖片一样,来自原生家庭和投机组装的新家庭充溢了口角、打击、暴力还是病态,但其倒是同一位在戏台及开光芒让大学生最喜爱之一律各类导师。

    print(“乘法”)

任凭为会老师的课,就比如在听单口相声,我还从不见了国内来另一样各项培训师出她这么深邃的栽培暨演说功力,她俨然是同个笑声、一员培训界的艺术家,很为难想象,这些年来,她是安过来的同时成长为今日夫样子的。

//default:

朝会老师说,在没有点性色彩前,她底人生充满挫败感,是惨淡且暴戾的。庆幸性格色彩给她打开了另外一扇窗,她和和气实现了和,她挽救了频临破碎的婚事,她把团结之眷属为带进了人性色彩的课堂。

//    print(“都不是”)

通向会老师是平等员自嘲和自黑高手,她说好的先生以前老嘲笑她人长得无为难,像猪一样。但由她上学性格色彩,并且经过一步步着力化性色彩资深讲师后,他的丈夫要于它们“猪”,只是多加了几乎单字——“亲爱的猪,我好而”。

}

认向会老师一致年多光阴,她底好玩越来越得心应手和自,更要紧的凡,她确实变得愈加耐看。杨先生也是30大抵底妻,这样的妻子而单独,在市面及为毫无疑问很为丈夫欢迎。

 

非但因为向会克带来吃丁欢喜,不仅仅向会是同一曰工作讲师,她还有其他一个身份——企业家,她底连锁门店只所以不久一年多之岁月纵全国遍地开花,
多上成百上千寒,而它通过几十分钟之招商演讲,现场便得成交百万之上的功绩。

/*

其三号教授老师是叶青先生。

 原始值:

 OC中枚举的精神就是整数,所以OC中的枚举是来原始值的,默认是从0开始

图片 10

 而Swift中之枚举默认是从未原始值的,
但是足以当概念时报告系统让枚举有原始值

叶青先生是平等个怀有17年营销实战经验的养专家,专门给柜老板培训营销。用性色彩的专业术语来说,叶青先生是性情中来成百上千“黄”的食指,她无比少废话,上来直接丢弃干货、给价值。

 enum Method: 枚举值原始值类型{

叶青先生个子小,但某些都未影响她浑身上下散发着强大的气场。

 case 枚举值

俺们看看舞台及之叶青先生非常强大,感觉没有她来不自然的做事还是职工。相信在其的行事上啊是饱受员工崇拜。但要是多花一点光阴以及叶青先生接触,你见面发觉叶青先生亲和力很强,身上有许多诙谐搞笑之因子。

 }

最好可贵的凡,叶青先生从未“女强人”的黑影,在外头她得以呼风唤雨,回到妻子,她却如有些女孩般和夫撒娇。

 */

然而心疼的凡,多数女性高人于外面呼风唤雨,回到家里呢习惯对冤家颐气指使,这样难免会非常起广大家庭矛盾。

 

有一样次等,叶青及先生去电影院看录像,她感念吃爆米花,老公说是垃圾食物,不为购买。叶青先生也同臀部坐在地上,开始撒起娇来:人家便只要吃爆米花。旁边的食指管眼瞪得像灯笼一样大,老公赶紧让叶青起来,然后去打爆米花了。

enum Method2: Int {

叶青先生就是是这么平等位在生活中能带吃人快的阴。有同样不善,她以问自己的汉子,说在小大部分上都是自我当说话,会不见面烦我累?老公答道,当然不是,你吃一个家充满了生气。

    case Add, Sub, Mul, Div

03

}

今非昔比之家如不同的书写,值得细细品味,随着时间之延迟,女人会变换得愈加产生内涵及魅力,这是岁月带被家之人情,如果没有时间的陷落,女性的保障经不起推敲。

 

图片 11

// 和OC中的枚举一样, 也得以指定原始值, 后面的值默认 +1

过来性格色彩的课堂上,能窥见各行各业优秀单身还是已婚的女人,她们一起的特质就是爱护读书、追求成长,不甘于现状,不甘于让世俗所羁绊。

enum Method3: Int {

那些意外走上前性格色彩课堂的多少鲜肉、老腊肉、老男人用充满是爱慕之观看在这些女人,开始意识及自成长的迫切性、重要性。

    case Add = 5, Sub, Mul, Div

秋以转换,有保持有知识有聪明之妻子会越加有影响力,也尤为被丈夫们的追捧,越来越多之多少鲜肉被美女所吸引,他们愿意失去为比较自己年纪大之老婆改变,变得提高、成熟、稳重。

}

嫦娥们为开逐步地不再介意年龄的差距,小鲜肉在元气和体力上比老男人还好,其实还能润成熟的爱妻。成熟的玉女如果未要嫁于于自己年龄老的老公,比打少女来也产生满满的优势,因为重新有点子,更明了尽女婿的心扉,更易于达成默契。

 

图片 12

// Swift中的枚举除了可以指定整型以外还可指定其他种类,
但是使指定其他种类, 必须被拥有枚举值赋值, 因为不能自动递增

这些,都是期的腾飞。时间,总会带来吃您想使的幸福,你仅仅管去分享上就是吓。愿君遭受见你的人儿。

enum Method4: Double {

    case Add = 5.0, Sub = 6.0, Mul = 7.0, Div = 8.0

}

 

// rawValue代表以枚举值转换为原始值,
注意老版中易为原始值的艺术名叫toRaw

//
最新的Swift版本不再支持toRaw和fromRaw了,只有rawValue属性和hashValue属性了!

print(Method4.Sub.rawValue)

 

//
hashValue来访问成员值所对应之哈希值,这个哈希值是未能够转的,由编译器自动生成,之后不可变更,Swift在偷偷摸摸其实采取哈希值来认识别枚举符号的(即成员)

print(Method4.Mul.hashValue)

 

// 原始值转换为枚举值

enum Method5: String {

    case Add = “add”, Sub = “sub”, Mul = “mul”, Div = “div”

}

 

// 通过原始值创建枚举值

/*

 注意:

 1.原始值区分轻重缓急写

 2.回来的凡一个不过选取值,因为原始值对应之枚举值不自然有

 3.老版本被为fromRaw(“add”)

 */

let m2:Method5 = Method5(rawValue: “add”)!

print(m2)

 

//func chooseMethod(op:Method2)

 

func chooseMethod5(rawString: String) {

    // 由于返回值是可选类型, 所以有或也nil, 最好下可选绑定

    if let opE = Method5(rawValue: rawString) {

        switch (opE) {

        case .Add:

            print(“加法”)

        case .Sub:

            print(“减法”)

        case .Mul:

            print(“除法”)

        case .Div:

            print(“乘法”)

        }

    }

}

print(chooseMethod5(rawString: “add”))

 

/*

 枚举相关值:

 可以让枚举值对应之原始值不是唯一的, 而是一个变量.

 每一个枚举可以是在某种模式下之一些特定值

 */

 

enum lineSegmentDescriptor {

    case StartAndEndPattern(start: Double, end: Double)

    case StartAndLengthPattern(start: Double, length: Double)

}

 

var lsd = lineSegmentDescriptor.StartAndLengthPattern(start: 0.0,
length: 100.0)

lsd = lineSegmentDescriptor.StartAndEndPattern(start: 0.0, end: 50.0)

print(lsd)

 

// 用switch提取枚举关联值

/*

 switch lsd

 {

 case .StartAndEndPattern(let s, let e):

 print(“start = \(s) end = \(e)”)

 case .StartAndLengthPattern(let s, let l):

 print(“start = \(s) lenght = \(l)”)

 }

 */

 

// 提取关联值优化写法

switch lsd

{

case let .StartAndEndPattern(s, e):

    print(“start = \(s) end = \(e)”)

case .StartAndLengthPattern(let s, let l):

    print(“start = \(s) l = \(l)”)

}

 

相关文章