1.一些你不知道的Python Tips
2.iOS TTTAttributedLabel çä¸ä¸ªå
一些你不知道的Python Tips
以下是一些有趣的Python技巧和小例子,旨在帮助您更好地理解和运用Python。
在Python中,字典的更新可以通过更新方法来完成。该方法接收一个字典作为参数。有趣的cf源码秒踢是,除了字典,方法还可以接收包含键值对的列表作为参数。例如,直接传入包含(k, v)这样的2项元组的列表也可以更新字典。然而,如果列表中存在只有单个元素的项,则更新可能不会成功,但其他正常的项(如4和5)会被更新。
我曾经在博客中探讨过Python元组的赋值问题,这也引发了我对字典更新方法的兴趣。方法的影视源码整站签名显示,除了字典,还可以接收可迭代对象或关键字参数作为参数,并且可以混用。方法签名说明只要传入的参数或其中的项有keys方法即可。
在编写代码时,我们经常遇到需要处理长字符串的情况,比如编写SQL语句时可能会超过单行长度限制。在Python中,大联盟 源码我们可以通过隐式的字符串连接来解决这个问题。然而,这种方法也可能会带来一些隐蔽的错误。例如,如果字符串之间没有适当的分隔符(如逗号),它们可能会被隐式地连接在一起,这可能会使开发者在调试时花费大量时间来查找错误。
在Python中,种子评论源码print函数提供了一种灵活的方式来实现多样化的打印效果。作为函数使用,print支持多个参数,并允许在打印时设置分隔符、文件输出以及强制刷新流。例如,使用`print(*lst, sep=', ')`可以方便地将列表项以逗号分隔进行打印。另外,叮咚交友源码print函数还支持`file`参数,可以直接将内容打印到文件中。此外,`flush`参数可以控制是否在每次迭代后强制刷新流,以实现更流畅的输出效果。
在Python 3中,`print`语句被改造成一个函数。这一改变提供了更多的灵活性和控制,使开发者能够实现更多样化的打印效果。例如,通过使用`print`函数的`*lst, sep=', '`参数,可以将多个列表项以特定的分隔符(如逗号)进行连接并打印。此外,`print`函数还支持`file`参数,允许直接将输出内容写入文件。同时,`flush`参数允许控制流的刷新频率,这对于实时输出或需要控制输出速度的场景特别有用。
Python还隐藏了两个模块:`__hello__`和`__phello__`。这些模块主要用于CPython的测试,由`freeze`工具生成,主要用于测试CPython,没有实际应用价值。对于这些模块的具体源码,您可以参考相关链接。
在Python 3中,可以直接通过CLDR(Unicode Common Locale Data Repository)中的short name打印emoji表情,格式为`'\N{ CLDR_SHORT_NAME}'`。这样操作非常方便,无需额外安装emoji包即可使用emoji表情。
在使用emoji字符串时,需要注意它们的特殊性质和用法。为了获取所有可用的emoji,您可以参考相关链接。这些链接提供了emoji的详细信息和使用示例,帮助您在Python代码中更有效地使用emoji表情。
iOS TTTAttributedLabel çä¸ä¸ªå
TTTAttributedLabel ççæ¯ä¸ªé常常ç¨ç第ä¸æ¹åºäºï¼å¾å¤ app é½ç¨å®æ¥ç»ææ¬å ç¹å»äºä»¶ï¼æ¯å¦ä¸æ®µæåä¸å¸¦æè½ç¹å»ç tagãä½æ¯è¿ä¸ªåºæ¯è¾èäºï¼è½ç¶è²ä¼¼ä¸ç´è¿æ人维æ¤ï¼è¿æ¯æä¸äºæ¯è¾åçå°æ¹ï¼èä¸éé¢ä¸»è¦ç¨ç CoreTextï¼ä¹åå¨ä¸äº CoreText çé®é¢ãæç项ç®ä»æ¯è¾æ©æå°±ä¸ç´å¨ç¨è¿ä¸ªåºï¼ä¹è¸©äºä¸äºåãä¸é¢å享æ¯è¾é大ç 3 个åï¼ä¾å¤§å®¶åèã
ç»ææ¬å ç¹å»åè½çåæ¶ï¼æ们å¾å¾éè¦æ¹åå¯ç¹å»çææ¬æ ·å¼ï¼æ¯å¦å¾ä¸ç¨äºç»¿è²ãè¦æ¹åææ¬æ ·å¼ï¼ç¬¬ä¸ååºå¯è½æ¯ç¨ attributedText ï¼è®¾ä¸ºä¸ä¸ª attributedString ãä¸å¹¸çæ¯ï¼ç±äº TTTAttributedLabel ä½è å¨åä½è¿ä¸ªåºçæ¶åï¼ attributedText è¿ä¸ªå±æ§è¿æ²¡æåºçï¼å æ¤è¿ä¸ªåºå¨è¿æ¹é¢æ¯æå¾ä¸å¤ªå¥½ã
ææ¾ç»éå°ä¸ä¸ªé®é¢ï¼å°±æ¯ç¨ attributedText æ¹è¿çææ¬å±æ§å¨æ¾ç¤ºä¸æ²¡ä½ç°åºæ¥ãæ¥äºä¹ååç°ï¼é对ç¹å»åºåçææ¬æ ·å¼æ¹å¨æå¥½ä½¿ç¨ setLinkAttributes: ä¸ setActiveLinkAttributes: 两个 APIãå½¢å¦ï¼
èéå¯¹å ¨ä½ææ¬ç设置ï¼æ¯å¦æ®µè½æ ¼å¼ãè¡è·çï¼ç®åç¨ attributedString 没æåç°ä»ä¹å¤§é®é¢ãä½æä¸æ¬¡æåç°ï¼cell å¨éç¨çæ¶åï¼ä¹å设ç link é½æ²¡ææ¸ é¤ãå°½ç®¡æ ·å¼ä¸çä¸å»ä¸æ¯ link çæ ·å¼ï¼ä½ææè½ç¹ï¼ç¹ä¸å»åæäº activeLink çæ ·å¼ãæ¥åæ»å¨éç¨æ¬¡æ°å¤äºï¼label ä¸å°å¤é½è½ç¹ãæä¹åäºå¢ï¼
ä¸ github æ¥ issuesï¼åç°ä¸ä¸ªç¥å¥ç设å®ï¼æ´æ¹ TTTAttributedLabel ç text å±æ§ï¼ä¸è½ç¨ï¼
èè¦ç¨ï¼
å³ä½¿ä½ ä¼ å ¥çæ¯å¸¦æ ¼å¼ç NSAttributedString ï¼èä¸æ¯æ®éç NSString ~å¦åå®ä¸è½æ£å¸¸æ¸ é¤ä¹å设置ç linkã尽管ä½è å£°ç§°å¨ å¹´å°±è§£å³äºè¿ä¸ªé®é¢ï¼ç¶èä¼¼ä¹å¹¶æ²¡æï¼è¿æ¯éè¦è¿æ ·åãå¥å¦å§ï¼æ²¡æ³å°å§ï¼è¿æ³ç´è§å§ãè¿æ¯ç¬¬ä¸ä¸ªåã
第ä¸æ¬¡ç¨çæ¶åï¼æè¿æ å¿ä¼ä¸ä¼ label ä¸çç¹å»åºåè¿å°ï¼ç¨æ·ç¹ä¸ä¸ãäºå®è¯ææå¤èäºãè®¾ç½®äº link ä¹åï¼ä¸ä» ç¹é£æåå®å ¨è½è§¦åç¹å»äºä»¶ï¼çè³ç¹å°å®ä¸ä¸è¡è¿æ¯è½è§¦åâ¦â¦ ææ¶å link æ¯è¾é¿ï¼ä¸è¡æ´ä½å äº linkï¼ç»æææ´ä¸ª cell é½ç¥¸å®³äºã
åæ¥æä¹æ¹çå¢ï¼ä¸çªå¯»æ¾ï¼æå¨æºç éæ¾å°äºä¸ä¸ª - (void)commonInit æ¹æ³ï¼éé¢æä¸è¡ _extendsLinkTouchArea = YES; æ¯ä¸ªæ©å¤§ç¹å»åºåçå±æ§ï¼èä¸é»è®¤å¼ä¸º YES ãå®æ¹æ NO ï¼é®é¢å°±è§£å³äºãè¿æ¯æéå°ç第äºä¸ªåã
è¿å¹¶ä¸æ¯ TTTAttributedLabel æ¬èº«çé®é¢ï¼èæ¯ CoreText çé®é¢ãå°±æ¯æåç°å¤è¡ labelï¼è®¾å® numberOfLines æ¢ä¸ä¸º 0 ä¹ä¸ä¸º 1 çï¼ææ¬éåºç° emoji ç unicode å符çæ¶åä¼å åæ´æ¶¨ï¼éå¸¸å¤¸å¼ ï¼è½ä¸ç´æ¶¨å°å ç¾Mï¼ç´è³ crashãå¦æè®¾äº linkAttributes ææè¿é®é¢ï¼ä¸è®¾æ²¡äºã
èä¸è¿ä¸ª crash 并ä¸å exception æç¹ï¼é½ä¸ç¥éæ¯åªéåºçé®é¢ãç¨äº instrument éç allocation å·¥å ·ï¼åç°æ¯ TTTAttributedLabel ç - (CGSize)sizeThatFits:(CGSize)size æ¹æ³ï¼ä¸å°éé¢ç CTFramesetterSuggestFrameSizeForAttributedStringWithConstraints è¿ä¸ª C å½æ°å°±æ»ã åå¾éè·ï¼åç°æ¯ CoreText ç CTFramesetterCreateFrame è¿ä¸ªå½æ°åºçé®é¢ãé¦æ¬¡è°ç¨è¿ä¸ªæ¹æ³çæ¶å width é½æ¯ -1ï¼å ¶ä»åæ°ä¹é½ä¸æ ·ï¼ä½åªè¦ææ¬é带 emoji å°±ä¼åºé®é¢ã
çèµ·æ¥æ¯ä¸ª CoreText ç bugï¼èä¸è²ä¼¼æ¯ä¸ª iOS 9 æ°åºç bugï¼å ·ä½åå æªç¥ã好å¨è§£å³æ¹æ³å¹¶ä¸å¤æï¼åªè¦æ label ç preferredMaxLayoutWidth 设æé 0 çæ°å°±è½æ¶é¤è¿ä¸ª crash äºãå½ç¶ä¸ºäºæ£ç¡®æ¾ç¤ºï¼è¿æ¯è¦è®¾ææ£ç¡®çå¼ï¼å³ææ¬å®é æ¾ç¤ºç宽度ã
å¦å¤ æ人åç°äºå¦ä¸ä¸ª emoji å¯¼è´ crash çé®é¢ ï¼æ¯å¨è®¾ç½® link ç range æ¶å¦æ range ç两头æ£å¥½åå¨ Unicode å符çä¸é´å°±ä¼å¯¼è´ crashï¼è¡¨ç°è·æéå°çé®é¢å·®ä¸å¤ï¼é½æ¯å åæ´æ¶¨ã解å³æ¹æ³æ¯æ£ç¡®è®¡ç® Unicode å符çé¿åº¦ãè¿ä¸ª issue 没æ解å³æçé®é¢ï¼ä¸è¿å¯è½æå ¶ä»äººä¼éå°ï¼æ以å¨æ¤ä¸å¹¶ååºã
以ä¸å°±æ¯æä½¿ç¨ TTTAttributedLabel è¿ä¸ªåºæ¶æ¾ç»éå°çä¸äºé®é¢ãçä¸æ©çï¼è¿ä¸ªåºè¿æ¯å¾å¥½ç¨çï¼è³å°å å»äºå CoreText é£ä¸å è¯æ³ç麻ç¦ãæå ¶ä»é®é¢å¯ä»¥ä¸ github æ issueï¼è²ä¼¼ä¼æ人çãç¥å¤§å®¶ä½¿ç¨æå¿«ã
æåèäºï¼
setAttributedText not reseting links
UILabel Link Hit Detection too large for small labels.
iOS 9.0.2 and iOS 9.1 Crash