Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 什么';这是可选的<;T>;和Swift中的可选类型?扩展可选项以携带错误信息?_Cocoa_Error Handling_Programming Languages_Swift_Optional - Fatal编程技术网

Cocoa 什么';这是可选的<;T>;和Swift中的可选类型?扩展可选项以携带错误信息?

Cocoa 什么';这是可选的<;T>;和Swift中的可选类型?扩展可选项以携带错误信息?,cocoa,error-handling,programming-languages,swift,optional,Cocoa,Error Handling,Programming Languages,Swift,Optional,更新-可选类型和可选类型之间没有区别 在Swift中,它们是相同的东西 因此,在Swift中,他们引入了Type?构造,该构造创建了一个可选类型,“强制”程序员检查该值是否确实存在 此外,在Swift中没有异常处理。 但有这种内在的选择机制 此可选功能?只是一个可选的枚举,其幕后灵感来自Haskell的Maybe 我想知道是否有任何方法可以通过可选类型传递错误信息。 能否通过可选类型Int?返回错误信息?这能代替异常或N错误吗?当然,Cocoa仍然使用(并且将使用?)NSError模式 在操场上

更新-可选类型和可选类型之间没有区别 在Swift中,它们是相同的东西

因此,在Swift中,他们引入了
Type?
构造,该构造创建了一个可选类型,“强制”程序员检查该值是否确实存在

此外,在Swift中没有异常处理。 但有这种内在的选择机制

此可选功能
只是一个
可选的
枚举,其幕后灵感来自Haskell的
Maybe

我想知道是否有任何方法可以通过可选类型传递错误信息。 能否通过可选类型
Int?
返回错误信息?这能代替异常或N错误吗?当然,Cocoa仍然使用(并且将使用?)NSError模式

在操场上玩耍时,我在Swift的“标题”中发现了这段代码:

基本上,这会向任何可选类型添加只读属性
description
。这将是非常强大的(我想可能会导致很多问题)

但是在尝试扩展
T?
之后,我得到了一个错误:

Non-nominal type 'T?' cannot be extended

那么为什么他们不在所有可选类型中添加一个属性来携带错误信息呢?这不是很有用吗?我的意思是,如果需要多个返回类型,可以返回一个元组…

选项基本上允许您检查变量是否为零。它并不意味着有错误消息。例如,以Objective-C代码段为例:

if(self.someProperty == nil){
    self.someProperty = [[PropertyClass alloc] init]
}else{
    //property is not nil.
}
在swift中,您可以执行以下操作:

var someProperty : PropertyClass?
if(someProperty){
    //property is not nil 
}else{
    //property is nil.
}
他们说:

Swift中的可选链接类似于Objective-C中的消息传递nil,但其方式适用于任何类型,并且可以检查成功或失败


swift中的
Option
类似于Scala中的
Option
Maybe
在Haskell中):它表示一个可能不存在的值

您要查找的是类似于Scala中的
Try
单子,它们表示计算的两种可能状态,通常是
成功
失败

这将是一种不同的代数数据类型,超出了可选值的用途

最终,由于swift在标准库中没有完整的monad,我认为默认的错误处理模式将保持经典的Cocoa
NSError
one。根据,正确的语法是:

extension Optional : Printable {
    //...
}
Optional
是Optionals的定义(见下文)<代码>类型?
只是创建类型的语法糖

enum Optional<T> {
  case None
  case Some(T)
}
enum可选{
无案例
案例(T)
}
在Swift编程语言iBook中,下面的两个声明是等效的

var optionalInteger: Int?
var opTionalInteger: Optional<Int>
var optionInteger:Int?
var OptionInteger:可选

这已经是该语言的一部分

extension Optional : DebugPrintable {

    /// A textual representation of `self`, suitable for debugging.
    var debugDescription: String { get }
}
extension Optional : DebugPrintable {

    /// A textual representation of `self`, suitable for debugging.
    var debugDescription: String { get }
}