原文定义函数:
func arithmeticMean(numbers: Double…) -> Double {
var total: Double = 0
for number in numbers {
total += number
}
return total / Double(numbers.count)
}
如何看出你的编程实践经验不丰富呢?比如“两段式初始化”这个翻译,很明显是通用英语思维带来的翻译结果。“Two-Phase”在既有计算机术语中,全都称为“二阶段”,如分布式事务处理中的“二阶段提交”,如并发控制中的“二阶段锁”。还有“In practice, this means that you do not need to write initializer…”这句中的“In practice”。
另说:
传播知识,虽然你是免费的,但也应当以严谨而审慎的态度。宁可不说,也不可误说。不可误人子弟的责任感亦当时刻背负。但人无完人,没有最完美,只有更优秀。当大家都在帮助你的时候,你应经过自己的理性思维,选择性地改进。而不应如此年轻气盛,负气而为,这是对他人的不尊重也是对自己已经付出的心血的糟蹋。
如此,才可能将此站发展成为受业界认可,受新人信任的 Swift 语言中文社区的中坚力量之一。若能如此,是你的荣誉,也是我们的光荣。
An extension can be used to extend an existing generic type, as described in Extending a Generic Type. You can also extend a generic type to conditionally add functionality, as described in Extensions with a Generic Where Clause.
Stored and computed properties are usually associated with instances of a particular type. However, properties can also be associated with the type itself.
原文:
You can link together multiple levels of optional chaining to drill down to properties, methods, and subscripts deeper within a model. However, multiple levels of optional chaining do not add more levels of optionality to the returned value.
类型转换
case let stringConverter as String -> String:
print(stringConverter(“Michael”))
中的第一个String应该加上()变为
case let stringConverter as (String) -> String:
print(stringConverter(“Michael”))
我能理解你的意思。
但我认为这里原文并不是强调“把代码转换成自然语言来阅读”。
这两行代码是高度符号化的(只有两个关键词”let”和“var”,且“let”跟常量字面上完全不沾边,只是出于别的考虑才选择了它吧),“转换成自然语言”是非常牵强的。
而且,一般程序员阅读代码也不应该转换成自然语言,这不是好习惯,不应提倡或暗示新手。
—
阅读由两步组成:第一步是你阅读了代码`let maximumNumberOfLoginAttempts = 10`,识别出里面的结构、词法和值;而第二步是理解其含义和效果。
在英文里,一个”read”兼顾了两者。而”read as”更侧重后者,而且往往是需要深入思考或体会的。
我给的链接(有道词典)的例子(比如”All western films can be read as a series of codes and the variations on those codes.”)无疑也都是侧重后者。
中文的“读作”则更侧重表面(发音和简单的词语变换),而并不太侧重理解。
当“读作”和“理解为”两个翻译候选都不足以覆盖原文”read as”的内涵的情况下,我认为还是选择后者,相对更好一些。
If an enumeration has raw values, those values are determined as part of the declaration, which means every instance of a particular enumeration case always has the same raw value. Another choice for enumeration cases is to have values associated with the case—these values are determined when you make the instance, and they can be different for each instance of an enumeration case. You can think of the associated values as behaving like stored properties of the enumeration case instance. For example, consider the case of requesting the sunrise and sunset times from a server. The server either responds with the requested information, or it responds with a description of what went wrong.
enum ServerResponse {
case result(String, String)
case failure(String)
}
let success = ServerResponse.result(“6:00 am”, “8:09 pm”)
let failure = ServerResponse.failure(“Out of cheese.”)
switch success {
case let .result(sunrise, sunset):
print(“Sunrise is at \(sunrise) and sunset is at \(sunset).”)
case let .failure(message):
print(“Failure… \(message)”)
}
Add a third case to ServerResponse and to the switch.
Notice how the sunrise and sunset times are extracted from the ServerResponse value as part of matching the value against the switch cases.
在 概览-枚举与结构体 里面,有翻译漏掉了部分信息:
译文:
添加一个 color()方法到 Suit,方法返回“black”
原文是:
Add a color() method to Suit that returns “black” for spades and clubs, and returns “red” for hearts and diamonds.
控制流中while square < finalSquare {
// roll the dice
if ++diceRoll == 7 { diceRoll = 1 }
// move by the rolled amount
square += diceRoll
if square < board.count {
// if we're still on the board, move up or down for a snake or a ladder
square += board[square]
}
官方文档为:
while square < finalSquare {
// roll the dice
diceRoll += 1
if diceRoll == 7 { diceRoll = 1 }
// move by the rolled amount
square += diceRoll
if square < board.count {
// if we're still on the board, move up or down for a snake or a ladder
square += board[square]
}
可选项绑定中你可以在同一个 if 语句中包含多可选项绑定,使用 where 分句来检查布尔量条件:
if let firstNumber = Int(“4”), secondNumber = Int(“42”) where firstNumber < secondNumber {
print("\(firstNumber) < \(secondNumber)")
}
// prints "4 < 42"
这个是错误的吧? 官方文档上是
if let firstNumber = Int("4"), let secondNumber = Int("42"), firstNumber < secondNumber && secondNumber < 100 {
print("\(firstNumber) < \(secondNumber) < 100")
}
这样的
「Swift 概览」的「函数和闭包」中,「在闭包中使用 in来分隔参数和返回类型。」的翻译不正确。原文是「Use in to separate the arguments and return type from the body.」,应该翻译为「在闭包中使用 in来把参数以及返回类型和函数体分隔开。」
在“属性”-“全局变量和局部变量”一节,第一段的第二句翻译为:
全局变量是定义在任何函数、方法、闭包或者类型环境当中的变量。局部变量是定义在函数、方法或者闭包环境中的变量。
原文:
Global variables are variables that are defined outside of any function, method, closure, or type context. Local variables are variables that are defined within a function, method, or closure context.
个人建议这里翻译为:
全局变量是定义在任何函数、方法、闭包或者类型之外的变量。局部变量是定义在函数、方法或者闭包内部的变量。
因为有个outside和within,都译成“环境中”,阅读起来有一定的理解难度。
:) 感谢你的建议,苹果官方 Swift 3 原文就是这样的呢……另外,在 Swift 中,它们是同优先级的,确实是“多个逻辑运算符组合的表达式会首先计算最左边的子表达式”,它的意义就是“多个相同或者不同的逻辑运算符”,这一点可能是和其他语言不同的地方。另外据我经验,手册全文应该也没有提到逻辑运算符的优先级问题,如果有,欢迎你再来斧正。
很抱歉由于我的疏忽在个别页面的翻译上出现了错误,我把迄今为止所有翻译了的页面都进行了检索,一共找出了接近10处错误,现在应该不会再有“整形”出现了。关于“栗子”的问题我一直坚持这是个风格问题——但实际上可能真的是“栗子”和“例子”交替出现的,暂时我不会去修改因为还没有想好。我想将来翻译完成了如果集结成书,则可能会为了严谨而改为“例子”,不过在此之前,我们还是多举几颗栗子来放松心情吧:)
Swift 编程语言与其他翻译不同的地方之一就是“快速响应”,总之,感谢你的提醒呢,希望这个网站的内容能在你的学习之路上祝你一臂之力!祝学的开心,读得愉快。
另:如果有其他问题,还请继续留言哦~
十奶。
直接在它前边添加一个和符合 ( &) 来明确可以被函数修改。
应该改为和符号!!!!
Swift指南->方法->类型方法->Player类->第5行和第6行: LevelTracker.unlockLevel(level + 1)
tracker.advanceToLevel(level + 1)
有误,应该为
LevelTracker.unlock(level + 1)
tracker.advance(to: level + 1)
参考苹果官方文档代码
站长你好,我是一个程序员,在使用swift的过程中,看到你的网站,我觉得这个网站做的很不错,真的帮助到了很多人,真心感谢你和其他辛苦付出的人。
但是使用的过程中,对照英文原版,发现很多中文翻译还不到位,我正好比较有空闲,也想加入翻译的队伍,贡献一点力量,希望能够让更多人受益。
期盼你的回复 ?
阻止重写那里
final 修饰符(比如 final var , final func , final class func , fianl subscript )。
最后一个final写错了
“Enumerations in Swift are first-class types in their own right.”
Excerpt From: Apple Inc. “The Swift Programming Language (Swift 4.1).” iBooks.
Swift 中的枚举是具有自己权限的一类类型。// 这个翻译偏了
Enumerations(枚举)是Swift 类型系统中的头等类型
闭包章节之中,「闭包是引用类型」上方的范例函数 incremByTen() 应为 incrementByTen()
章节3.4 可变形式参数
原文定义函数:
func arithmeticMean(numbers: Double…) -> Double {
var total: Double = 0
for number in numbers {
total += number
}
return total / Double(numbers.count)
}
可变形式参数“numbers”没有使用省略实际参数标签,函数默认“numbers”作为实际参数标签,下面调用“arithmeticMean(1, 2, 3, 4, 5)”会因为标签缺失引发错误“Missing argument label ‘numbers:’ in call”,应改为:“arithmeticMean(numbers:1, 2, 3, 4, 5)”,或者定义函数时候使用省略实际参数标签:“func arithmeticMean(_ numbers: Double…) -> Double”
官方文档函数定义省略实际参数
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html#//apple_ref/doc/uid/TP40014097-CH10-ID158
勘误
「Swift指南」 > 「字符串和字符」 > 「字符串字面量」一节中,
字符串字面量是被双引号包裹的固定顺序文本字符(”)。
兴许应为
字符串字面量是被双引号(”)包裹的固定顺序文本字符。
原文:
A string literal is a sequence of characters surrounded by double quotation marks (“).
The Swift Programming Language (Swift 4.0.3) > Language Guide > Strings and Characters > String Literals
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/StringsAndCharacters.html
谢谢提供这么好的资源。现在发现 欢迎来到Swift的世界-> 关于Swift 没有和苹果官网的文档同步更新
站长,你这个教程有完整的pdf下载吗。
补充:感谢你提供这么完整的翻译。
在数组讲解数组部分的remove(at:)函数时, 用到了removeAtIndex()这个旧版的函数, 望奶神修改一下,或者注明一下新旧版函数~
https://www.cnswift.org/strings-and-characters#spl-5
语法是3.X的语法,下面的是对的
“for character in “Dog!?” {
print(character)
}”
摘录来自: Apple Inc. “The Swift Programming Language (Swift 4.0.3)”。 iBooks.
感谢博主!
唯一的一个缺点就是服务器有点慢,不介意的话我可以免费提供国内的阿里云服务器!
有意的话可以发邮箱:-=安全起见已隐藏=-
另外建议开启WP的缓存功能
关于deinit那里 应该叫做 析构 吧 叫反初始化我觉得不够恰当吧~ 感谢站长的分享~
对的,实际上是应该叫 构造器 和 析构器,但不这么用的原因有两个:1、我个人至今不理解为什么这么翻译,构造我能懂,可是析构到底是个什么鬼?? 沿用 Java 不是 C,Swift 不是 Java;2、苹果方面也不希望你这么叫,为啥捏?因为构造器用的名字是 Constructor , 而这里苹果用的词汇是 initializer ,这样一来你就明白它们之间的不同了。
实际上对于构造器和初始化器的叫法,在编程上都有(Java 里也有人叫构造器为初始化器)……说的好像跑题了,总之,就是为了对应初始化器,我把这个 deinit,翻译为了“反初始化器”,认为它是“ deinitializer” 的缩写。
析
解释:劈开木头。
会意:右边的斧头(斤)劈左边的木头。
用法:析薪、分析、解析。
参考文献:『說文解字』。
小小的建议,翻译的字体的颜色有些偏浅,淡
我 想给一笔钱给站长。可是,你这个站却要求我使用支付宝。出于隐私权的保护,我是不会安装这个东西的。我只用微信。你却没有微信的账号。
总的说来,似乎站长早已收下了支付宝的垄断费,好像不再需要其他钱了吧?说笑的。不过从这个角度来看,站长并不懂把握这个领域的商机。这种机遇不是你懂技术就可以把握的,关键是商业意识。
这个网站可以做得很丰富的。但现在似乎就是一套苹果的Swift的手册的中文翻译本。
1.可以将教程和教师指南结合起来 (苹果官方的培训课程)。
2. 在此基础上可以将1提及的教程和教师指南进一步细化。比如说字符串这个章节里的名词解释有些马虎和过分专业,对初学者来说,尤其是没有接触过编程的人来说就一头雾水,还有就是练习和检查方面做得可以更细更多的。
3. 也应该把Xcode的拉进来翻译。实际上swift是在xcode上建立起来的所见所得化的工具。必定有很多不完善的地方。
4. 这是最后一点,请从新写过留言系统。其实网上有的是照搬的模块。
文中initializers多次被翻译为初始化器,是不是应该叫初始化方法。感觉初始化器听起来像一个新概念,但本质上并不是。
目前在留言板中讨论”however”问题的人有三四个人,只有你一人坚持“总之”。由此可见,“总之”给70%以上的人带来了阅读理解障碍,而非你个人认为的“更适合新手”。
再看另一个例子,就是“便捷初始化器”那段讨论。我看了下原文,就想知道你们谁更有理一点,这一看不得了。为了了解上下文,Automatic Initializer Inheritance 节标题开始看。
首先映入眼帘的是 “Automatic Initializer Inheritance” 被翻译成了 “自动初始化器的继承”,即是 “自动+初始化器+的+继承”。
Automatic 是形容词,语法规则上是“形容词+的+名词”,“漂亮的人”、“自动化的电梯”,“的”字可省略,而且进一步可省略为“自动电梯”。
Automatic 应是“自动化”,暂不再深入省略用法,先看接下来的。
Initializer 这是一个名词无疑,有编程经验的人应知道,它这里是指类中的初始化方法,即“Initialization method”,原文没用“Initialization method”可能是出于区别其他语言考虑,因为其他语言一般类中定义的函数才叫方法,而事实上,Swfit中类、结构体、枚举里均可定义函数,都叫做方法(method),参考“Methods”章节开篇说明。既然原文没用“Initialization method”,而用“Initializer”,所以你翻译为“初始化器”也无可厚非,因为已经存在“初始化器”这种译法。不过在实践中,“初始化器”更多的是指程序员采用工厂模式等编程设计模式编写的一种控制程序,让多个对象可以被集中管理初始化过程的程序。
Inheritance 是名词,我们知道它肯定是和“Initializer”结合的,因为常识告诉我们“自动化”这个形容词是不可能有继承关系的。而且在语法上 “名词+名词”是一种固定组合,叫做复合名词,所以“Initializer Inheritance”是一个整体。但在翻译 Inheritance 的时候又出现了问题,因为中文的“继承”是动词,而英文的“Inheritance”是名词。两种语言的词性差异你没有仔细琢磨。有个方法,那就是把中文的动词变成名词,词性就一致了。先把“继承”用“继承规则”代替,“规则”是名词,为何选择“规则”来补全这个词?因为此文语境就是在讲述规则如何。
“名词+名词”结构中的“的”字,有些情况可加可不加,有些情况必加,有些情况不能加,也需要分清楚。例如“儿子的父亲”,可以加,表示一个主体“父亲”;“儿子父亲”,也可不加,表示联合并列;“爸爸的爸爸”,必须加,如果改成“爸爸爸爸”就意义全变;还如“妻子女儿”,不能加,若改成“妻子的女儿”,又变了,英文中也类似“Moon River”,“月亮河”,不可是“月亮的河”。
那“Initializer Inheritance”这个复合名词的完整翻译就出来了“初始化方法的继承规则”。从上段“名词+名词”的语法分析中可知,两名词中间加“的”字一定会改变原意,至少表述的侧重点都会发生变化。该节内容讲述的主体就是继承规则而不是初始化方法,所以这个“的”字需要加上。类比例子就是“电梯的运行规则”。
此标题语法结构应该是“形容词+复合名词”,形容词和名词之间的“的”字可加可不加,我们先加上看看“Automatic Initializer Inheritance”的完整翻译“自动化的初始化方法的继承规则”,相比“自动初始化器的继承”哪个一目了然无需多言。再看如何简化完整版,先看类比的例子“自动化的电梯的运行规则”,句子结构与词的词性完全一致,通常情况下大家会怎么简述这句话?“自动电梯的运行规则”,“规则”一词不可少,否则对上下文不敏感的读者会脑补“运行过程、运行状态、运行结果”等意义不同的结果,而且也讲过要把“继承”变为名词,所以“规则”一词更不可少。更进一步简化“自动电梯运行规则”,运用到我们的节标题上,“自动初始化方法继承规则”,“自动初始化器继承规则”尚可。
所以,就“Automatic Initializer Inheritance”分析了那么多,就为了说明一件事,翻译的遣词造句要“信达雅”并不容易,要结合专业术语、专业知识背景。也许在你看来最终结果改善不大,但是,有句话叫“失之毫厘谬以千里”,假设你的误差只有3毫厘,但传播给别人后,放大三倍就会成为9毫厘的误差,与真实差距是9;如果你能竭尽所能控制误差在1毫厘,那别人放大3倍是3,与真实差距是3。
传播知识的严谨性一定要时刻牢记于心,翻译“信达雅”,可信第一、通达明白第二、简明优雅第三。
可能由于你的编程实践经验不丰富,而导致了你在你的能力范围内可做到的误差已经是3,那么,在有外人帮助你的情况下,我们可以一起改进的,成长的,也是你自己。
如何看出你的编程实践经验不丰富呢?比如“两段式初始化”这个翻译,很明显是通用英语思维带来的翻译结果。“Two-Phase”在既有计算机术语中,全都称为“二阶段”,如分布式事务处理中的“二阶段提交”,如并发控制中的“二阶段锁”。还有“In practice, this means that you do not need to write initializer…”这句中的“In practice”。
“Two-Phase”为何要“二阶段”而不是“二段式”?因为“阶段”,能体现出一前一后或一上一下的逻辑关系,能给人脑海里这种直观感觉,还能感觉出这两个阶段的处理应该有所差异,如果无差异,何不合并在一起?而“二段式”就给不了人这种感觉,就仅仅是“两段”,它既能表达有先后顺序的两个阶段,也可以表达没先后顺序的两个并列阶段,就让菜鸟有了50%的误会可能性。
“In practice” 如果是我,会翻译成“实践中,”而不会翻译成“实际上”,“事实上”更不可取。在通用英语思维中认为这三者并无差异,因为词典上就是这么写的。但结合到语境,就有不同了。“事实上,”给人的感觉是要开始给人讲一个根本性的道理。“实际上,”给人的感觉也差不多是要开始讲道理或者是表达某种现象。“实践中,”就直接明了的告诉读者,在实际践行所授知识的过程之中可以怎么做。
“实践中,这意味着你不必…”,阅读速度快的程序员在看到这些字眼后,不论大脑如何将这几个词打散后再组织,意义都不会有偏差。“这意味着你在实践中不必……”, “这意味着你在实际上不必……”,结合编程这种身体力行的活儿来讲,“实践中”怎么都比“实际上”更应景。
姑且说这些吧。说了这么多,“便捷初始化器”还没提,也不想多提了,你在用电脑的时候应该看过“快捷方式”这个深入人心的词,而没看过“便捷方式”吧?
此翻译确实有用心,但由于诸多原因导致的质量改进空间还很大。年轻人有自己的主见和看法是好的,但你太有些以自我为中心,生活中你有自信乃至自大的一面。要学会承认山外有山人外有人,这个世界上没有个人英雄主义(牛顿、爱因斯坦、咸蛋超人都是踩在前辈和同仁的肩膀上)。多经历就好了,谁都年轻过。
算了,我有罪,我还太年轻,很多还不会,我得向你们学习。对不起。我错了。老哥你厉害。
老哥你要是有空,这个网站给你,你来整体校对下吧。
站长加油!最有心得swift传播者!
谢谢你!
只要能帮到帮助的人,这就足够了,何必在意某些“高手”。每次有基础点忘记了,我不是打开官网,而是直接在你们网站看,这就是你们的作用。对于那些说什么“蹩脚”翻译,你能力那么强怎么不做点无私的事情?
十奶,没事没事,加油加油,支持你,有人指点或质疑也是学习的过程
你要是没空,我看看把这个网站关了吧,看起来我这些乡野翻译违背了我传播知识的初衷,对不起我错了。
“在有外人帮助你的情况下,我们可以一起改进的,成长的,也是你自己。”
——摘录自上文留言。
另说:
传播知识,虽然你是免费的,但也应当以严谨而审慎的态度。宁可不说,也不可误说。不可误人子弟的责任感亦当时刻背负。但人无完人,没有最完美,只有更优秀。当大家都在帮助你的时候,你应经过自己的理性思维,选择性地改进。而不应如此年轻气盛,负气而为,这是对他人的不尊重也是对自己已经付出的心血的糟蹋。
如此,才可能将此站发展成为受业界认可,受新人信任的 Swift 语言中文社区的中坚力量之一。若能如此,是你的荣誉,也是我们的光荣。
感谢站长的付出。根据留言上下文,我觉得@阿驹 的批评据事而论,判断有据,站长对他的批评,应该给予重视,而不是“负气而为”。
我觉得你说的很中肯
我觉得阿驹说的很中肯,批评的也非常优秀;但我认为阿驹忽略了一个事实:就是在目前的国内,还没有一个完整的 Swift 4 的中文翻译网站或者电子文档(如果有,还请正误)——除本站之外。
在这种情况下,最需要的是,有人来做,先出一个版本再说。
这个版本的质量的高低其实并不那么重要,最重要的是:有这么一个翻译版本了,大家能来看,然后勘误,提出修改意见,然后改进。
如果第一个版本才出来,就求全责备,大加批评,可能对于最初的热心是很浇了一盆冷水的。
说一句难听的话,阿驹先生也没见翻译一个版本出来。
我丝毫不否认阿驹先生论述的合理性,但是,对一个新生儿需要的是严厉的批评(即便是正确无比的)还是细心的呵护,我想答案是显而易见的。
站主几乎是一个人搞起来这样一个不小的工程,不简单。现在需要的是针对一些明显错误的勘误,不需要许多文字来说道理,说一下错误在哪里,或者哪里跟官网的不一致,站主看到了及时正误或者调为一致,这就挺好。
另外有一部分人要求把“栗子”改为“例子”,其实也大可不必。如果想要改,就是一个查找和替换的事——这样写,除了好玩就是活泼一点(意思的理解上,应该是完全没有任何歧义的)。
总之,有这样一个完整的翻译版本了,我们一定要呵护,并且使它少错误,同官网一致;大加批评,甚至说站主年少气盛什么的,真不需要(人家一个年轻人,做成了这么一件事,盛也有盛的资本)。后面 Swift 修改少了,稳定了,再来着手调节一些名词的译法,也没什么。
swift51.com了解一下
不可否认你追求完美见多识广,但一副高高在上的说教和妄图揣测他人内心的姿态无疑拉低了你的人品
在我看来本站是更新比较及时的了,翻译质量也不错,再说站长又不是专业学英语的,有点偏差也是可以理解的,又不是去出书。
照你的标准国人大部分的翻译都是不合格的,既然你这么专业那么好不如你都翻译翻译??
你的指正很细致,而且的确有理有据。
人之患在好为人师
知识水平高,并不代表可以站在高位指导他人,用探讨和推荐的语气说这些话,站长也许早就接受了你的指正
麻烦楼主 下次修订的时候 把当前的英文链接放下 辛苦啦
怎么个当前?修订的内容就是苹果官方手册的版本修订页面。
请问如何下载本页为PDF点击后弹出一个页面 点左上角的PDF吗 并没有出现下载按钮
可能是插件故障,你多等一会,因为插件服务器在国外所以你懂的。
Swift 4 在 “访问控制” 中添加了一个新特性, “Private Members in Extensions”, 需要添加到译文中.
相关链接:
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AccessControl.html#//apple_ref/doc/uid/TP40014097-CH41-ID3
已经更新:)苹果的文档里似乎忘了提这一点。
“访问控制”一章中的一些大标题的字体大小不正确, 和正文混在一起了.
已经更正~
“泛型”中的”Generic Where Clauses”的翻译是”泛型Where语句”, Clauses 应该翻译成”分句”吧.
是的,已经更正。
Swift 4 的”协议”中的”类专用的协议”部分已经更新了:
You can limit protocol adoption to class types (and not structures or enumerations) by adding the AnyObject protocol to a protocol’s inheritance list.
protocol SomeClassOnlyProtocol: AnyObject, SomeInheritedProtocol {
// class-only protocol definition goes here
}
即类的专用协议需要使用 AnyObject 关键字, 译文中还写的是使用 class 关键字. 示例代码也更新了.
参考链接:
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html#//apple_ref/doc/uid/TP40014097-CH25-ID267
确实是这样,已经更正!
泛型
startsWith(_:) 方法寿险确保容器拥有至少一个元素
寿险 -> 首先
已更正。
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Extensions.html#//apple_ref/doc/uid/TP40014097-CH24-ID151
里面的这一段在译文里漏掉了:
An extension can be used to extend an existing generic type, as described in Extending a Generic Type. You can also extend a generic type to conditionally add functionality, as described in Extensions with a Generic Where Clause.
感谢提醒,已经补上。
关于”Argument Labels”和”Parameter Names”的翻译.
把他们翻译成”实际参数”和”形式参数”好像不太合适吧, 实际参数应该是调用方法时传入的参数.
我觉得把它们直译成”参数提示标签(或内容提要标签)”和”参数名”更好一些.
这个是国际公认的软件开发方面的专业名词,我也没办法。argument 就是 实际参数,而 parameter 就是 形式参数,也就是我们常说的实参和形参。在开源版本里以前就是统一翻译为 参数,现在也都改正了。
我比较讨厌实参和形参的说法,所以我就写全了,叫 实际参数 和 形式参数。
我感觉翻译成实参标签和形参名称 比较好
并不会,如果说简写,那就直接形参实参最好了,但这是一种古老的叫法,会给新手带来不可想象的困惑。至于是标签还是名称,实际上都是参数名,翻译为标签并不合适。
另外就是技术名词不应该自己创造,也好考虑到后来人和其他技术人员沟通时候的通用性,不应该随意增减创造(实在没标准翻译的也没办法,但这个是公认的哈。
“Swift 指南->初始化”中:
当满足规则2的一部分时,子类的便捷初始化器可以实现父类指定初始化器。
原文:
A subclass can implement a superclass designated initializer as a subclass convenience initializer as part of satisfying rule 2.
as part of satisfying rule 2 应该翻译为: “作为满足规则二的一种情况”, 而不是”当满足规则2的一部分时”.
子类能够以便捷初始化器的形式实现父类指定初始化器来作为满足规则2的一部分。
这个不是满足规则2的一种情况,而就是一部分,实际上我好像也没这么用过,总之,我重新翻译了一下,这下和原文文风一致(绕口+没有标点符号短句),这句应该是我校对时候丢了。另外我还统一了本文中便捷初始化器和便利初始化器的冲突问题。
convenience initializer 应该翻译成”便捷初始化器”还是”便利初始化器”比较合适? 现在有没有统一的标准?
我认为是翻译为“便捷”意思是方便快捷,这也是这个功能原本的意思。没标准吧这个。
我发现 However 基本上都翻译成了 “总之”, 有的地方已经偏离原意很远了, 比如:
“Swift 指南->可选链” 中:
john.residence 的值当前包含合法的 Residence 实例。总之, john.residence.address 的值目前为 nil 。
原文:
The value of john.residence currently contains a valid Residence instance. However, the value of john.residence.address is currently nil.
这个地方是一个很明显的转折了, 肯定得翻译成”然而”的.
……
要不翻译为更旧的通用翻译「无论如何」怎样?这句里 john.residence.address是空的,原文中并明有解释,因为原因很明显,所以就「总而言之」了一下,我觉得是很合理的。你也可以理解为转折,但我理解的是递进。1、这是合法的;2、这个是空的;3、它是 nil。
文中重点要描述这个nil,所以说了一个 however,是一个结束论点的句式,不愿在「为什么是空」这个问题上多做纠结。
好吧, 我们都没能说服对方. 这只是一个小问题, 不影响整体意思的理解, 没事.
?
“Swift 指南->可选链” 中的第一句话:
可选链是在可能递归为 nil 的可选项中查询和调用属性、方法和下标的过程。
原文是:
Optional chaining is a process for querying and calling properties, methods, and subscripts on an optional that might currently be nil.
是不是把 currently 误翻译成了”递归”?
是这么回事,已经更正。
Swift指南->属性:
“总之,属性也可以与类型本身相关联” 的原文是 “However, properties can also be associated with the type itself”, 需要把”总之”改为”然而”.
however 也可译做 「总之」。 在上下文中,取「然而」并不符合原文意思,这里并没有转折的意思,我们常说「这个怎么怎么样,然而,它也怎么怎么。」但这里显然是一个进一步的说明「can also」是说「也能」。所以,我认为这里是一个进一步的总结,意思是 「总之,这个属性也可以与类型本身去关联。」是一个补充和说明,并无转折的意思。
Stored and computed properties are usually associated with instances of a particular type. However, properties can also be associated with the type itself.
翻译一: 存储属性和计算属性通常和特定类型的实例相关联。总之,属性也可以与类型本身相关联。
翻译二: 存储属性和计算属性通常和特定类型的实例相关联。然而,属性也可以与类型本身相关联。
我觉得还是翻译二比较符合原意. “总之”是对前面表述的总结, 但这里不是对前面的总结, 而是在阐述另一种情况.
那理解为进一步说明呢?这里不是转折,我还是不喜欢也不理解这个「然而」的翻译方法,把原文的语气等内容都给抹除了,它的色彩更偏向于略贬义。
“Swift 指南->可选链”中:
你可以通过连接多个可选链来在模型中深入访问属性、方法以及下标。总之,多层可选链不会给返回的值添加多层的可选性。
原文:
You can link together multiple levels of optional chaining to drill down to properties, methods, and subscripts deeper within a model. However, multiple levels of optional chaining do not add more levels of optionality to the returned value.
这个地方的 However 翻译成 “总之” 好像意思就不太符合原意了. However 后面有较明显的转折的意思.
总之,是总而言之,但如果是总结,我们尝试一下「你可以通过连接多个可选链来在模型中深入访问属性、方法以及下标。但是,多层可选链不会给返回的值添加多层的可选性。」这是严重的转折语气,但前后似乎并没有这么严重的转折,「你可以通过连接多个可选链来在模型中深入访问属性、方法以及下标。另外,多层可选链不会给返回的值添加多层的可选性。」这是严重的递进语气,这两个其实都不是很合适。这句上下文本身就没有一个很明确的关系,并不是上文有「会」,下文出现「不会」就一定是转折,这里是一个进一步的说明。是说你可以链接多层……,可返回的不是多层。这里如果用但是,语句上更通顺,但是,这样就不是中文的用法,我认为用「总之」,比一个烂大街的「然而」要好很多。用「然而」取前肯定后否定的意思,是可以的。我用「总之」则是说后边的内容是前边内容的一个递进。——合并来讲,可以说是「无论你链接多少层可选,返回的总是一个」这样的意思,而不是「你可以链接很多层但是返回的只有一个」。意思是一样的,但描述的方式是不一样的。所以我觉得这里这个连接,用什么都可以,去掉也行,为了保持文风,我才留下的。我始终觉得从小学就教的把 however 翻译为「然而」是一个很�的选项。
支持“然而”或“但是”,这里的“However”是表转折。奶人(姑且这么称呼)应该承认自己在翻译中的“印随效应”,你一开始接触“However”这个单词,不管是你的启蒙老师还是谁告诉你的,它的意思就是“总之”,这个“总之”深深地印在了你的脑海,所以才会出现大家评论的“However几乎全翻成了‘总之’”。
我们不妨先用类比法来看原文中的“However”如何翻译较好:
结婚通常是一个男人和一个女人关联在一起,However,一个男人也可以和另一个男人在一起。(明显用‘总之’是不恰当的)
我们再用抽象法来看:
A和B在一般情况下和C关联,However,A/B 也可以与D本身关联。(大多数情况下按前半句做,少数情况下也可以按后半句做。)
说来说去,however,本身就是一个转折性的词语。不论翻译成“然而、总之、总而言之、话说回来、但是……”
最后一个例子:
去公司上班通常是周一至周五,总之,周末也可能去公司上班。
去公司上班通常是周一至周五,然而,周末也可能去公司上班。
去公司上班通常是周一至周五,但是,周末也可能去公司上班。
不论如何,我是不支持“总之”的。
和你说的恰好相反,我的启蒙老师——都统一翻译为“无论如何”,从我小学开始到大学,没有任何变化,请原谅我不是天资聪颖没有读一个英语专业,总之,我在这里还是坚持把它翻译为总之,并且没有对原文造成任何内容上的混淆。我不是专业翻译,不再和你们争论,我坚持我认为正确的东西,这样翻译更有助于新手阅读,也更符合我所理解的原文的意思,毕竟话又说回来,中文里很难简单的用两个字来表现英文中的 somehow,however,whatever 之类的词,毕竟是语言不同的。
“栗子”改回”例子”吧
已做更正。
类型转换
case let stringConverter as String -> String:
print(stringConverter(“Michael”))
中的第一个String应该加上()变为
case let stringConverter as (String) -> String:
print(stringConverter(“Michael”))
已做更正。感谢提醒:)
/”使用断言和先决条件不能代替你代码中小概率非法情况的处理设计。总之,使用他们来强制数据和状态正确会让你的 app 在有非法状态时终止的更可预料,并帮助你更好的 debug。在检测到异常状态时尽可能快地停止执行同样能够泥减小由于异常状态造成的损失。/”
最后一句话,同样能够泥减小?
哈哈,感谢,已经修复了。
控制流:
与 C 不同,Swift 允许多个 switch 情况来判断相同的这。事实上,坐标 (0,0) 可能匹配这个栗子中所有四个情况,第一个匹配到的情况会被使用。坐标 (0,0) 将会最先匹配 case(0,0) ,所以接下来的所有再匹配到的情况讲被忽略。
第一句和最后一句有误,烦请修正,谢谢!
改了呢~谢谢提醒。
可选链第一行多了个y?还是我眼花···
去掉了?
新人学习开发看过其他的版本还是最喜欢这个!排版也好语言也好都很用心!谢谢你们!
只要能帮到你,我就很开心啦! 这个是用 WordPress 搭建的呢 :)
大大们,“ Swift 同样也为三个主要的集合类型提供了更牛逼的版本, Array” 一个严谨的翻译,不应该出现“更牛逼”这样的俗语吧~~~
好,应你的要求,我把这个特色去掉。
楼主你好,在学习 Swift 4 的时候搜到了你的网站,之前看到过 SwfitGG 也做过翻译的工作,不过就像你说的,你这里是第一时间紧跟官方的预览文档,所以也让我有了第一时间学习到中文版新知识的机会,英文文档我也能看,只不过我看起来太慢了,所以感觉还是看母语的文档能快速学习。另外看到这里的中文版有一些小伙伴参与了翻译,所以我也想参与进来,不知道楼主对参与翻译有哪些要求,如果能满足这些具体要求,我也很愿意参与进来。
已私。
不能直接下载完整版吗?只能一小节一小节的下载
很遗憾不能,目前我没找到哪个比较好用的wordpress能提供这个功能的………………仅仅找到这么个单页生成的………………
相反,传给 someFunctionWithNonescapingClosure(_:) 的闭包是非逃逸闭包,也就是说它可以引式地引用 self
更正:
相反,传给 someFunctionWithNonescapingClosure(_:) 的闭包是非逃逸闭包,也就是说它可以隐式地引用 self
在”语言指南-闭包-逃逸闭包”中.
已更正,谢谢!
书写错误
位置:方法-在实例方法中修改值类型
错误:mutating func moveByX(deltaX: Double, y deltaY: Double)
正确:mutating func moveBy(x deltaX: Double, y deltaY: Double)
已更正!
闭包那一节:
“在 Swift 中,一个能够捕获值的闭包最简单的模型是内嵌函数,即被书写在另一个函数的内部。一个内嵌函数能够捕获外部函数的实际参数并且能够捕获任何在外部函数的内部定义了的常理与变量。”
倒数第四个字是错别字,应该是:“常量与变量”
已更正!
错别字
Swift指南 属性 -全局和局部变量-注意-“全局敞亮” 应该是“全局常量”
已经改正,谢谢提醒!
请问现在还招翻译的人么,需要什么条件呢
哈哈当然招了,唯一的条件就是没啥报酬,读者的捐赠挺少的。你加群然后找我
路过顶一下的了
Thanks god bless u!
建议和疑问:
为何不用 GitHub 开源,然后用 GitHub Pages 轻松建站?
这样别人可以很方便地提交PR和issue。
而且很多程序员都在用GitHub,也便于宣传和搜索到。
或者,像[The swift programming language 3.0 中文版](https://www.gitbook.com/book/znoodl/swift/details)一样用GitBook。不过,我没发现参与贡献的方法,所以不太推荐。
因为我不会用那个,当时最熟悉这个,顺手就搭建了,而且是我自己翻译和校对(后来才有朋友参与进来),所以并不想那样做。现在我维护不过来了,但遗憾的是我没时间把它迁移过去。
你没有时间,就只能等你有时间了。这没啥好说的……
不过,github早晚要学的吧……
你可以慢慢来。先在github上发点别的简单东西试水。
github我会用,有200多star的项目呢 XD
我是不会用那个gitbook,以前用过感觉太麻烦,而且我很讨厌markdown,不想使用它。
在《基础内容/常量和变量/声明常量和变量》里”This code can be read as: “应该翻译成”这段代码可以被理解为:”。
参考: http://dict.youdao.com/search?q=be+read+as
我们这边是尽量保持原来的风格,所以是“读作”
我能理解你的意思。
但我认为这里原文并不是强调“把代码转换成自然语言来阅读”。
这两行代码是高度符号化的(只有两个关键词”let”和“var”,且“let”跟常量字面上完全不沾边,只是出于别的考虑才选择了它吧),“转换成自然语言”是非常牵强的。
而且,一般程序员阅读代码也不应该转换成自然语言,这不是好习惯,不应提倡或暗示新手。
—
阅读由两步组成:第一步是你阅读了代码`let maximumNumberOfLoginAttempts = 10`,识别出里面的结构、词法和值;而第二步是理解其含义和效果。
在英文里,一个”read”兼顾了两者。而”read as”更侧重后者,而且往往是需要深入思考或体会的。
我给的链接(有道词典)的例子(比如”All western films can be read as a series of codes and the variations on those codes.”)无疑也都是侧重后者。
中文的“读作”则更侧重表面(发音和简单的词语变换),而并不太侧重理解。
当“读作”和“理解为”两个翻译候选都不足以覆盖原文”read as”的内涵的情况下,我认为还是选择后者,相对更好一些。
read as
可以被翻译为“读作”“理解为”“看作”“解读”等等,在数学上,课本中经常会有某些定义公式,说xxxx(某公式),可以被读作xxxx(中文的解释),而不是“理解为xxxx(中文的解释)”。比如这一段:
这里只是解释了字面的意思,并不带有主观上要求读者把它理解为什么。“新的命题P→Q, 读作如果P则Q”而不是“新的命题P→Q, 可以理解为如果P则Q”,本章或者本翻译中大量类似的内容,也应该是具体代码的人类语言中立解释,应该是“读作”,而不是很主观的“可以被理解为”,每个人的理解都是不同的,而读作,是必须的、固定的、官方的。
参考链接:
http://202.197.191.206:8080/29/text/chapter01/section2/part5/r1.htm
http://blog.wenxuecity.com/blog/frontend.php?act=articlePrint&blogId=15490&date=200702&postId=21673
http://cn.linguee.com/中文-英语/search?source=auto&query=read+as
错误处理的指定清理操作的第2句,
“这个语句允许你做任何无论执行如何离开当前代码块都必须要做的清理工作——无论是因为抛出了错误还是因为 return或者 break这样的语句。”
“任何无论执行如何离开当前代码块” -》“如何离开当前代码块”更通俗易懂
稍微改了一下,苹果官方文档似乎有问题,403了,等回头我再看看。
重新翻译了一下。
翻译非常到位,堪比出版,各位译神辛苦啦!
这个评论框移动到最上面是不是会好点?
上有上的好,下有下的妙,国内的社交一般是在上边,引导用户先回复再思考。
wp一般在下边,引导读者先思考再评论。
Module compiled with Swift 3.0.2 cannot be imported in Swift 3.1
3.0.2 编译的 framework 在 3.1 上面报错
请使用swift 3.1 编译器重新编译你的 framework
函数 — 多形式参数的函数 — 报错
func greet(person: String, alreadyGreeted: Bool) -> String {
if alreadyGreeted {
return greetAgain(person: person)
} else {
return greet(person: person) //此处会报错,提示少了 alreadyGreeted: Bool 这个参数
}
}
print(greet(person: “Tim”, alreadyGreeted: true))
// Prints “Hello again, Tim!”
return greet(person: person)
这里的greet(person:)
是上文中的一个函数,本例中声明的函数类型是greet(person:alreadyGreeted:)
正如下文所述:“注意这个函数与之前展示的函数 greet(person:) 是明显不同的。尽管两个函数都叫做 greet , greet(person:alreadyGreeted:) 接收两个实际参数但 greet(person:) 函数只接收一个。”
自动引用计数-闭包的循环强引用,第6行代码,lazy var asHTML: Void -> String = {,官网已更新为:lazy var asHTML: () -> String = {
感谢!已经修复,同时我还将页面后边若干处类似错误修复了,并修复了末尾的那个内链 :)
饭初始化器只在类类型中有效
这句话有错别字
已修复
swift指南集合类型下基本合集操作的第二个图好像有问题
与官方一致,没毛病。
整数类型介绍的时候“(比如说上边栗子里的 UInt8 )中”“栗子”应为例子
栗子,不应该是情怀吗?
(比如说上边栗子里的 UInt8 )
这可是我们cnswift特有的呀
Set 的 .isDisjoint(with:) 方法翻译有误,意思完全相反了
是的,已经修正。
Set 的 .isDisjoint(with:) 翻译有误,意思完全相反了
是的,已经修正。
Swift3.0 应该是不支持浮点取余了的,希望更正
请问在哪一章还有相关内容?
基本运算符 那章开头的第三段话
是的呢!终于找到了,已经修正!
现在还可以加入翻译吗?不过我英语还不是特别好,想试试。
可以的,你加群,然后找我,我告诉你怎么做。 XD 欢迎呢!
你好,枚举的隐式指定的原始值这节中,
let earthsOrder = Planet.Earth.rawValue
// earthsOrder is 3
let sunsetDirection = CompassPoint.west.rawValue
// sunsetDirection is “west”
rowValue不支持这种用法了?
xcode8 求帮助,谢谢
let earthsOrder = Planet.Earth.rawValue
// earthsOrder is 3
这个可以,CompassPoint不可以
enum CompassPoint: String {
case north, south, east, west
}
print(CompassPoint.west.rawValue)
--------
west
Program ended with exit code: 0
是可以使用的。
请问会出PDF或者ePub版的吗?
会
swift3.0官方文档的翻译版会出书吗?想买一本
等都翻译完了再出电子版,实体书可能就比较遥远了。
刚开始学习。
在https://www.cnswift.org/a-swift-tour 这页上面的函数和闭包这一章:
……使用 _ 来避免使用实际参数标签。
func greet(_ person: String, on day: String) -> String {
……
greet(“John”, on: “Wednesday”)
……
on day: String =>这个是我漏掉了什么吗?
因为按这节上面那个例子,看起来应该是on : String,
或者 两行一起改为day : String呢?
func greet(_ person: String, day : String) -> String {
……
greet(“John”, day: “Wednesday”)
……
仔细看了下,中间那行,用的是day呢:
return “Hello \(person), today is \(day).”
搜索不管用啊 都搜不出来
似乎确实是这个样子,wp自带的搜索不怎么给力,我看看接入google搜索吧
考虑到大多数国内用户可能无法使用谷歌,我弄了个插件增强了自带搜索的能力:)
哪里可以下载,我想下载来看….
很抱歉,暂时不能呢,群里有网友制作的chm版本,获取你可以将就一下……
func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number 10 后仍旧显示true,想请教一下这是什么原因,未入门的新手求指导,非常感谢。
显然,你复制的代码不全,我根本不能理解你在说什么,最好能说一下章节我好进一步帮助你。
SORRY重新回去找了一下没有找到,找到了再麻烦你吧,打扰了= =
没事:)
建议:举个栗子 -> 举个例子
这是情怀 XD
延迟存储属性那一节最后部分“只有在 importer 属性第一次被访问时才会创建DataManager实例”有误,应当是创建DataImporter实例才对吧。
lazy var importer = DataImporter()
说的是这一句代码啦,不是那个类而是那个属性。很抱歉最近比较忙所以回复的晚了 :)
有一个关于网页的建议, 当用户滑动右边的内容页时, 左边的导航不要跟着动嘛.
左边的导航不会跟着动……只不过它太长了所以还是会微微地滚动,不然就显示不全了呀
在 “整数转换”小节中 “请参考扩展”跳转到了一个无效域名,话说这是你的博客么 http://spl.logcg.com/extensions/
这是以前 cnswift 没有独立域名时候的地址,是挂在我博客的子域名上的 :)
说一下大的章节名,不然我找不到哈。
在 Swift 指南 – 基础内容 里面。这样的坏链好像不止一个,你可以打开源文件搜搜你的博客网址。
感谢提醒,已经全部修正
在 Swift 指南 – 字符串和字符 里面:
” Swift 的 String类型桥接到了基础库中的 NSString类。如同 AnyObject(此处应有链接)中描述的那样 ”
链接不可点.
感谢,已更新!
在String字符串一节中 , 还有用到++自增运算符的。但是Swift3.0已经废除了++了。可以更正一下。
感谢,已更正。
能否共享一份英文原版的下载链接?
自定义运算符这一章节应该还没有更新到最新版本吧。
我来跟进翻译一下?
加一下欢迎页面的群,在里面找我:)
最近学swift,主要看官方的文档,用这里的中文版做辅助。发现有些章节还没有翻译,正好最近有时间,想帮忙做些事情。
已加你qq,详聊。
概览-错误处理 中译文第一句话有误:
译文:
你可以用任何遵循 ErrorType 协议的类型来表示错误。
原文:
You represent errors using any type that adopts the Error protocol.
已更正
效率很高,?
哈哈 :)
概览-枚举和结构体漏掉了一段内容:
If an enumeration has raw values, those values are determined as part of the declaration, which means every instance of a particular enumeration case always has the same raw value. Another choice for enumeration cases is to have values associated with the case—these values are determined when you make the instance, and they can be different for each instance of an enumeration case. You can think of the associated values as behaving like stored properties of the enumeration case instance. For example, consider the case of requesting the sunrise and sunset times from a server. The server either responds with the requested information, or it responds with a description of what went wrong.
enum ServerResponse {
case result(String, String)
case failure(String)
}
let success = ServerResponse.result(“6:00 am”, “8:09 pm”)
let failure = ServerResponse.failure(“Out of cheese.”)
switch success {
case let .result(sunrise, sunset):
print(“Sunrise is at \(sunrise) and sunset is at \(sunset).”)
case let .failure(message):
print(“Failure… \(message)”)
}
Add a third case to ServerResponse and to the switch.
Notice how the sunrise and sunset times are extracted from the ServerResponse value as part of matching the value against the switch cases.
补充:
我在译文中找到了这段内容,看起来只是译文的顺序有点问题,上面指出的那段内容应该放在“枚举”之后,“结构体”之前。
已更正
在 概览-枚举与结构体 里面,有翻译漏掉了部分信息:
译文:
添加一个 color()方法到 Suit,方法返回“black”
原文是:
Add a color() method to Suit that returns “black” for spades and clubs, and returns “red” for hearts and diamonds.
已更正!
函数和闭包勘误:
错误:
func makeIncrementer() -> (Int -> Int)
应更正为:
func makeIncrementer() -> ((Int) -> Int)
很抱歉,请再提供下详细的位置?我没找见-。-
在 “Swift 概览”里面搜 func makeIncrementer() -> (Int -> Int)
你说了章节名,我就能找到啦,感谢,已更正
在类和结构体这一章中的类是引用类型中举的例子中:使用let 创建某个常量,后来又给此常量修改值,是不是错误了,应该声明为var变量
好像是我搞错了。。类是可以声明为let,并修改其值的,而结构体不行
引用类型的值对其修改其实改的是其内容而不是引用本身,这里我们说的“引用”其实就是这个对象的指针啦。
结构体啊数组啊这些不能改,是因为它们是值拷贝类型,他们的内容就是他们的值。
什么时候书pdf的???
等基础部分全部翻译完成就会出pdf版本 :)
高级运算符章节,值溢出的地方,第二张图片有误。
是正确的呀?
控制流中while square < finalSquare {
// roll the dice
if ++diceRoll == 7 { diceRoll = 1 }
// move by the rolled amount
square += diceRoll
if square < board.count {
// if we're still on the board, move up or down for a snake or a ladder
square += board[square]
}
官方文档为:
while square < finalSquare {
// roll the dice
diceRoll += 1
if diceRoll == 7 { diceRoll = 1 }
// move by the rolled amount
square += diceRoll
if square < board.count {
// if we're still on the board, move up or down for a snake or a ladder
square += board[square]
}
已经更正!
控制流中 游戏棋盘用 Int 值的数组来表现。它的大小基于一个叫做 finalSquare 的常量,它被用来初始化数组同样用来检测稍后的胜利条件。棋盘使用 26 个零 Int 值初始化,而不是 25 个(从 0 到 25 ):
let finalSquare = 25
var board = [Int](count: finalSquare + 1, repeatedValue: 0)
变量board错了,官网上是var board = [Int](repeating: 0, count: finalSquare + 1)
你是正确的,已经更正!
在 控制流 -> fallthrough 中, 『fallthrough 关键字不会为switch情况检查贯穿入情况的条件。』 -> 『fallthrough 关键字不会检查它下一个将要落入的 case 中的匹配条件』??
同上。
在 控制流 -> fallthrough 中,『并且因此它们避免了意外执行多个 switch 情况』。 『switch』 -> 『case』??
switch 情况 -› switch case;这里case都翻译为情况了。
在 集合类型 -> 访问和修改数组 中,『除非当 count为 (就是说数组为空),否则最大的合法索引永远都是 count – 1,因为数组的索引从零开始』,应该为 『count 为 0』。
由于代码高亮插件bug,0没有显示出来,现在已经修复:)
在 集合类型 -> 中,『下边的离子创建了一个叫做 shoppingList的数组来储存 String值』, 『离子』 -> 『例子』?
已经修复!
在 集合类型 -> 数据类型缩写语法 中,『尽管两种格式功能上相同,我们更推荐缩写并且全书涉及到数组类型的时候都会使用简写』 中 『简写』是不是应该为 『缩写』?
缩写和简写混乱了,抱歉,全文中使用“简写”的次数明显大于“缩写”,现在已经全部替换为“简写”。
在 字符串和字符 -> UTF-8 表示法 中,『 print(“\(codeUnit) “, appendNewline: false) 』应该为 『print(“\(codeUnit) “, terminator: “”)』。
已经更正!
UTF-16 表示法 中也存在这样的问题。
也已经更正,感谢!
在 字符串和字符 -> 前缀和后缀相等性 中,『如同字符串和字符相等性一节所描述的那样, hasPrefix(_:)和 hasSuffix(_:)方法执对字符串当中的每一个扩展字形集群之间进行了一个逐字符的规范化相等比较』 中 『执对字符串』是不是应该为『执行对字符串』?
应该是“只对” :)
在 字符串和字符 -> 前缀和后缀相等性 中,『要检查一个字符串是否拥有特定的自出福安前缀或者后缀』,是不是多了 『自出福安』?
已经更正!
在 基本运算符->混合逻辑运算 中,『如果我们输入了正确的密码并通过了视网膜扫描,或者如果我们有合法的钥匙或者我们知道紧急超驰密码,就允许进入』中,『紧急超驰密码』应该改为『紧急强制密码』。
override 这个词的专业翻译为 超驰 ……也许翻译为重写更容易理解,但翻译为 强制 是肯定不符合原文的。
在 基本运算符->逻辑非运算符 中,『在这个栗子当中,要注意布尔量的的常量和变量名能够帮助你保持代码的可读和简洁』,应该将『布尔量的的常量』改为『布尔量的常量』
已经更正,感谢:)
在 基本运算符->合并空置运算符 中,『下边的栗子使用了合并空值运算符来在默认颜色名和可选的用户定义颜色明之间做选择』,这句话中『用户定义颜色明』应该改为『用户定义颜色名』。
已经更正~感谢:)
在 基础内容 -> 类型别名 章节中,『在这个栗子中, AudioSample 就是 UInt 的别名』,应该为将 UInt 改为 UInt16。
感谢提醒!已经更正:)
有个地方看了原文文档,感觉有点不太对劲,大神们仔细看一看吧
初始化部分最后那个棋盘的地方,那个程序是不是有点不对劲,我把实例最后的一个row和coumn写成7和7,返回出来的是true。
我的想法是,两个for循环做的一个事情是将8×8的棋盘拉成了一条64个格子的首位相连的长条然后依次赋予false和true,但是实际的棋盘的情况则是,(7,0)和(0,1)两个格子是一样的,但是在64个格子的长条中则是相反的。
不知道我表达清楚没有。。。。
望大神给回复
收到,我去和原文校对一遍
我的意思是官方文档是不是有问题
嗯我查看了官方文档,确实是一致的,这个没有办法了。我们翻译的目标是与官方完全一致,至于好不好理解这个……原则上不能随意更改,不然就不叫翻译啦!
我想,既然你已经能够对它有自己的看法,那这一章你一定已经掌握的很好了:)继续你的旅程吧~
嗯嗯。。。 我自己没有都仔细 弄懂了
hello,版主
我是一个3年移动开发经验的开发者,最近赋闲,想要为Swift的翻译做出一份贡献。
我的邮箱是k9629@qq.com。
希望可以获得这次机会。
?
大神们幸苦了
方法里面,枚举的self属性的TriStateSwitch例子中,next方法中,对三个case的应用都少打了一个引用的点
感谢提醒!已经更正:)
希望大神能一直更新下去
会的!(只是有点慢……
可选项绑定中你可以在同一个 if 语句中包含多可选项绑定,使用 where 分句来检查布尔量条件:
if let firstNumber = Int(“4”), secondNumber = Int(“42”) where firstNumber < secondNumber {
print("\(firstNumber) < \(secondNumber)")
}
// prints "4 < 42"
这个是错误的吧? 官方文档上是
if let firstNumber = Int("4"), let secondNumber = Int("42"), firstNumber < secondNumber && secondNumber < 100 {
print("\(firstNumber) < \(secondNumber) < 100")
}
这样的
已更正,看来苹果又悄悄地更新了。
感谢提醒!
控制流章节中3.3,3.4应该归在3.2下面。官网网页版中,3.2的Switch是18磅字体,“Where“”Compound Cases“是16磅字体
感谢提醒!已经更正了,你是对的:)
能不能在更新文档时,把从1.0到2.0到3.0-xxx的更新之处写出来,这样后人在看文档时能知道之前是怎么写的,在后面开发中更好的适配。
更新的详情请查阅“版本历史”,我们原则上不对苹果的内容做增改。
1. 概览里面的《泛型》好像还没更新到swift3.0吧?
译文:
func anyCommonElements (lhs: T, _ rhs: U) -> Bool
swift3.0:
func anyCommonElements(_ lhs: T, _ rhs: U) -> Bool
where T.Iterator.Element: Equatable, T.Iterator.Element == U.Iterator.Element
2. 泛型下面的 EXPERIMENT 的翻译也有点不妥
译文:
修改 anyCommonElements(_:_:)函数来让一个返回任何有两个相同顺序元素的数组。
原文:
Modify the anyCommonElements(_:_:) function to make a function that returns an array of the elements that any two sequences have in common.
个人建议:
修改 anyCommonElements(_:_:)函数,使之返回任意两个Sequence的公共元素组成的数组。
译文没粘贴全? func anyCommonElements (lhs: T, _ rhs: U) -> Bool
确实,这里当时更新的时候好像有点问题,已经更正了。最后一句话也更新了——不知道什么时候悄悄改的。 那个实验的内容确实有点奇怪,已经改正为“两个数组中共有元素”。
感谢反馈!
有错字,反初始化那一节的‘deinit{}’代码后面一段话写的‘…你不能自行调用反初始化器。父类的反初始化器可以被自雷继承’
哈哈哈!好萌的错字。(都是输入法的锅),总之,已经改正,感谢提醒!
「Swift 概览」的「函数和闭包」中,「在闭包中使用 in来分隔参数和返回类型。」的翻译不正确。原文是「Use in to separate the arguments and return type from the body.」,应该翻译为「在闭包中使用 in来把参数以及返回类型和函数体分隔开。」
separate from 这是一个词组,用来说明是“分开、区别”的意思,这里是 separate from body,这里body显然指代的是闭包函数体,翻译为中文则是 闭包(函数体),这里闭包即指代闭包函数体本身。
关于 arguments ,这里是旧翻译,应该翻译为 实际参数 ,那么比较本地化的翻译就是 “在闭包中使用 in 来分隔实际参数和返回类型。” 如果非要说严肃一点,那就是“在闭包(函数体)中使用 in 来分隔实际参数和返回类型。”
已更正。
枚举那一节的代码 func evaluate(expression: ArithmeticExpression) -> Int { 有问题
应该是 func evaluate(_ expression: ArithmeticExpression) -> Int {
你说的没错,这个页面被遗漏了,现在已经与官网同步,感谢提醒!
现在xcode8和swift已经正式推出了,咱们这里的译文什么时候推出epub版本呢?这样方便做笔记和勾画知识点
是的呢! “指南”还差两篇就全部翻译完成了,届时会着手发布电子书。请务必再耐心等一等!
还有两篇什么时候会发布
发布时间并不确定,因为这两篇不是我在翻译:)
什么时候放出epub版本呢?
请问还需要帮忙翻译么,我稍了解些英文。
方便加QQ群吗?首页的QQ群加一下:)
Hello,请问你还需要帮忙翻译的吗?我自己有时也会做一些Swift博文相关的翻译
我加你qq了
翻译的很好啊,不过最后几章暂时还没有呢,支持你,做的很棒
在“属性”-“全局变量和局部变量”一节,第一段的第二句翻译为:
全局变量是定义在任何函数、方法、闭包或者类型环境当中的变量。局部变量是定义在函数、方法或者闭包环境中的变量。
原文:
Global variables are variables that are defined outside of any function, method, closure, or type context. Local variables are variables that are defined within a function, method, or closure context.
个人建议这里翻译为:
全局变量是定义在任何函数、方法、闭包或者类型之外的变量。局部变量是定义在函数、方法或者闭包内部的变量。
因为有个outside和within,都译成“环境中”,阅读起来有一定的理解难度。
你说的没错?其实是这里翻译错了,应该是“之外”
函数那个位置:
————————————————————————
func greet(person: String, day: String) -> String {
return “Hello \(person), today is \(day).”
}
greet(person: “Bob”, day: “Tuesday”)
————————————————————————
调用函数的时候有 person: 么?
Xcode报错
请问你使用的 Xcode 版本是多少呢? 这个语法是与苹果官方 Swift 3 同步的,你需要使用 Xcode 8 beta 来编译运行。
抱歉,没有注意版本。
那么能同时安装两个Xcode么?
当然可以!现在的 xcode 8 还是beta,可以和 7 共存
在“集合类型”–> “数组”–>“使用默认值创建数组”中,方法不对,在 Swift3.0中已经更改为:public func repeatElement(_ element: T, count n: Int) -> Repeated;所以对于示例应该改为:var threeDoubles = Array(repeatElement(0.0, count: 3));同时显示的结果为[0, 0, 0]
https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html#//apple_ref/doc/uid/TP40014097-CH8-ID105
官网文档并未更改,确实是
var threeDoubles = Array(repeating: 0.0, count: 3)
但是这个方法在 Xcode8 beta 版本确实是无法找到的,不知道为什么?能调到的方法var threeDoubles = Array(repeatElement(0.0, count: 3));只有这个,而且实现的效果是一样的!
?就是说其实他们又改了,而文档还没有来得及跟着做改变。我这里也不能变,不然等到苹果官方做改变的时候就改的两岔了。
官方其实有时候也挺坑的,文档跟不上节奏?
闭包“简写的实际参数名”中。这里s1和s2并不占内存,所以省略的应该是“形式参数”而不是“实际参数”。但是看了一下原文,原文用的是argument,搜索了一下,形参是parameter,实参是argument。大概是原文本身就自相矛盾吧?
这里确实用哪个都行,对外是形式参数,但对内这个确实是实际参数的名字……这么说的话其实也算对。如果都说成参数就没有歧义了。——不我过还是遵照原文的意思,把两个参数区分了哈。
请问一下,在基本运算符一章的浮点数取余计算里,我用 Swift3.0也就是 Xcode8的版本去写,发现不能直接那样写会报错的!报错信息:% is unavailable:Use truncatingRemainder instead。
所以想问一下是什么情况?
感谢提醒!实际上在swift 3 的官方文档中,浮点数取余的相关论述已经删除掉了!所以我猜可能是去掉了这个功能吧。
闭包一章,非逃逸闭包,
func someFunctionWithNonescapingClosure(closure: @noescape () -> Void) {
closure()
} 目前这样书写报错,正确写法:
func someFunctionWithNonescapingClosure(@noescape closure: () -> Void) {
closure()
}
这是官方 swift 3 的新语法,见 https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html#//apple_ref/doc/uid/TP40014097-CH11-ID94
let bicycle = Bicycle()
print(“Bicycle: (bicycle.description)”)
// Bicycle: 2 wheel(s)
少了\
print(“Bicycle: \(bicycle.description)”)
更新语法的时候多选中了一笔,已经更正,感谢!
在这个栗子中,初始化过程从一个子类的便捷初始化器开始。这个便利初始化器还不能修改任何属性。它委托给了同一类里的指定初始化器。
栗子。。。
例子就是上文的插图,初始化过程从子类的便捷初始化开始,然后它调用了自己的指定初始化器,指定初始化器又调用了父类的指定初始化器~这个示例不是代码哈,原文也是这么写的,我也觉得改成“图示”之类的会好些。
栗子 你写错啦~
这是情怀~
所有类的存储属性——包括从它的父类继承的任何属性——必须在初始化期间分配一个初始值。
这句话应该写清楚,初始值包含可选值?
要求赋值,如果你规定这个属性为可选类型,那它就会在没有赋值的情况下自动赋值为nil,这和初始化需要赋值没有任何冲突——所有的属性在初始化的时候都必须赋值。
概览/错误处理中 let printerResponse = try sendToPrinter(“Bi Sheng”) 应改为 let printerResponse = try send(job: 1040, toPrinter: “Bi Sheng”)
感谢,已经改正!
概览中,let sortedNumbers = numbers.sort { $0 > $1 },这里sort会有警告,应该用sorted
已确认,改掉了,感谢!
是否有关于斯坦福大学公开课的翻译呢 (Developing iOS9)
没有哦, 目前 Swift 编程语言 只翻译苹果官方的文档。
你好,非常感谢你们翻译的这么及时。想问下,有PDF版可以下载吗,因为边看边做笔记有助于记忆。看网页我有时候找不到阅读过的印象。非常感谢。
很遗憾,如你所见——现在 Swift 编程语言 还没有全部翻译完成,PDF等格式电子书一定会有——只不过会在全部翻译完成之后才会提供,至少在基础部分翻译完成之后吧:)
所以还要稍微等一等咯~
“在用浮点数初始化一个新的整数类型的时候,数值会被删减。也就是说 4.75 会变成 4 , -3.9 会变为 -3 。” 这里“删减”用截断可能会更合适。
你说得对,截断更加直观,已经更正:)
你可以从函数和方法同事还有类,枚举以及结构体创建泛型。 这里的“同事”应该是错别字。
是的确实是错别字!已经更正了,顺便还有其他几处略不合适的翻译也已经更正,感谢!
“Swift 语言中逻辑运算符 && 和 || 是左相关的,这意味着多个逻辑运算符组合的表达式会首先计算最左边的子表达式。”
这句话有点歧义,会误以为 && 和 || 具有相同的优先级。最好改为:
“……这意味着多个 ‘相同的’ 逻辑运算符组合的表达式会首先计算最左边的子表达式。”
:) 感谢你的建议,苹果官方 Swift 3 原文就是这样的呢……另外,在 Swift 中,它们是同优先级的,确实是“多个逻辑运算符组合的表达式会首先计算最左边的子表达式”,它的意义就是“多个相同或者不同的逻辑运算符”,这一点可能是和其他语言不同的地方。另外据我经验,手册全文应该也没有提到逻辑运算符的优先级问题,如果有,欢迎你再来斧正。
if true || false && false
{
print(“&& 具有比 || 更高的优先级,因此右边的逻辑运算符首先计算。”)
}
else
{
print(“|| 和 && 具有相同优先级,因此按从左到右的顺序计算。”)
}
结果是 true。
实际计算过程是 true || (false && false)。原文有误。另外,辛苦了。
你是对的。 我在你提及的位置加了一条译注来说明这个被官方忽略了的问题:)
预计几时出PDF版本?
嗯,这是一个比较尴尬的问题……简单来讲就是PDF等格式的电子书会比较晚才能出来,因为:一、要等整个文档全部翻译完成;二、全部翻译结束之后,还要进行一遍精翻来处理那些比较生硬的段落。在这之后,才会进行处理生成好看方便的PDF、epub、mobi等格式电子书:)
写的贼好
已支持,感谢博主
感谢~
前几天打开时,无法连接服务器,以为你们不做了……
原来在更新3.0,非常真诚的感谢你们,你们做的有意义的事情,也将影响/改变我们使用这个语言做有意义的事情!
再次感谢,并加油,并支持~
首先感谢你的留言,好感动!
但我还是要认真地承认错误,前几天网站挂掉的时候其实 3.0 就已经完成了的……只不过后台数据库更新导致不太兼容所以网站都挂了。持续时间大概断断续续 10 个小时之多,我们深感抱歉 XD。不过,现在问题已经解决了,现在网站速度更加迅速:)
(其实我一度以为是服务器遭到了攻击,还好不是呐)
不要用歪字体好么, 看着好费劲, 程序员就不要为难程序员了,
你说得对,何必互相伤害呢?已经摆正了。(由于cdn的原因,可能需要过一阵子才能同步过来)
栗子 应为 例子
整形 应为 整型
很抱歉由于我的疏忽在个别页面的翻译上出现了错误,我把迄今为止所有翻译了的页面都进行了检索,一共找出了接近10处错误,现在应该不会再有“整形”出现了。关于“栗子”的问题我一直坚持这是个风格问题——但实际上可能真的是“栗子”和“例子”交替出现的,暂时我不会去修改因为还没有想好。我想将来翻译完成了如果集结成书,则可能会为了严谨而改为“例子”,不过在此之前,我们还是多举几颗栗子来放松心情吧:)
Swift 编程语言与其他翻译不同的地方之一就是“快速响应”,总之,感谢你的提醒呢,希望这个网站的内容能在你的学习之路上祝你一臂之力!祝学的开心,读得愉快。
另:如果有其他问题,还请继续留言哦~
十奶。
来自单表达式闭的隐式返回
单表达式闭包能够通过从它们的声明中删掉 return 关键字来隐式返回它们单个表达式的结果,前面的栗子可以写作:
reversed = named.sort({s1, s2, in s1 > s2})
1
这里, sort(_:) 方法的第二个实际参数的函数类型已经明确必须通过闭包返回一个 Bool 值。因为闭包的结构包涵返回 Bool 值的单一表达式 (s1 > s2),因此没有歧义,并且 return 关键字能够被省略。
标注:reversed = named.sort({s1, s2, in s1 > s2})多写了个逗号,导致报错,应该是reversed = named.sort({s1, s2 in s1 > s2}) ,希望你们能改掉
来自单表达式闭包的隐式返回 这个已经修复!谢谢你的反馈。很抱歉没有及时响应,因为一些原因,通知邮件被吞掉了……总之,再次感谢:)
奶神加油啊