小编Ven*_*eri的帖子

Swift是否具有空合并运算符,如果不是,那么自定义运算符的示例是什么?

许多语言中的一个共同特征是Null Coalescing Operator,它是一个二进制运算符,通常用于缩短类型的表达式:

x = possiblyNullValue NCO valueIfNull
Run Code Online (Sandbox Code Playgroud)

...这NCO是语言的空合并运算符的占位符.

Objective C的Null Coalescing运算符是?:,所以表达式为:

x = possiblyNullValue ?: valueIfNull
Run Code Online (Sandbox Code Playgroud)

上面的表达式也相当于使用第三运算符:

 x =  someTestForNotNull( possiblyNullValue ) ? possiblyNullValue : valueIfNull
Run Code Online (Sandbox Code Playgroud)

Null Coalescing Operator的优点

  • 更易读的代码(特别是长的描述性变量名称)
  • 减少印刷错误的可能性(测试的var仅键入一次)
  • 没有对测试变量进行双重评估,其中测试变量是一个getter,因为它访问过一次(或者需要将其缓存以有意避免双重评估).

swift

43
推荐指数
3
解决办法
1万
查看次数

在运行时设置泛型类型

我上课了

public class A<T>
{
   public static string B(T obj)
   {
       return TransformThisObjectToAString(obj);
   }
}
Run Code Online (Sandbox Code Playgroud)

上面使用字符串纯粹是示范性的.我可以在已知/指定的类型上调用这样的静态函数:

string s= A<KnownType>.B(objectOfKnownType);
Run Code Online (Sandbox Code Playgroud)

如果我事先不知道T,我该怎么做这个调用,而是我有一个Type类型的变量来保存类型.如果我这样做:

Type t= typeof(string);
string s= A<t>.B(someStringObject);
Run Code Online (Sandbox Code Playgroud)

我得到这个编译器错误:

Cannot implicitly convert type 't' to 'object'
Run Code Online (Sandbox Code Playgroud)

c# generics

25
推荐指数
3
解决办法
3万
查看次数

如何在列上使用<select> editoptions时在jqGrid中获取select的值

我在jqGrid中有几列有edittype ="select".如何读取特定行中当前所选值的选项值?

例如:当我提供以下选项时,如何获得FedEx的"FE"等.

editoption: { value: “FE:FedEx; IN:InTime; TN:TNT” } 
Run Code Online (Sandbox Code Playgroud)

rowId/cellname的getRowData()仅返回select的文本/显示组件.

如果我在列上设置"更改"数据事件,则基础触发仅在鼠标单击时更改事件,而不是键盘选择(有许多对泛型选择和鼠标/键盘问题的引用).

底线,当选择新值时,我需要知道更改时的选项值,以及发布到服务器之前的选项值.

select jqgrid

8
推荐指数
2
解决办法
3万
查看次数

node.js https.get()触发错误ECONNREFUSED

OAuth舞蹈的一个步骤涉及交换通过回调接收的访问令牌代码.特别是对于Facebook服务器端身份验证,以下https GET请求返回响应正文中的访问代码:

https://graph.facebook.com/oauth/access_token?
  client_id=YOUR_APP_ID
  &redirect_uri=YOUR_REDIRECT_URI
  &client_secret=YOUR_APP_SECRET
  &code=CODE_GENERATED_BY_FACEBOOK
Run Code Online (Sandbox Code Playgroud)

尝试连接时,Node.js会触发错误:

 https.get( /**String | Object*/ options, function ( res ) {
   res.setEncoding( 'utf8' );

   res.on( 'data', function ( data ) {
     // parse response body
   } );

 } ).on( 'error',function ( e ) {
      Log.w( TAG, "Error requesting access_token", e );
 } ).end();
Run Code Online (Sandbox Code Playgroud)

错误是:

{  code: 'ECONNREFUSED',
   errno: 'ECONNREFUSED',
   syscall: 'connect' }
Run Code Online (Sandbox Code Playgroud)

该调用与wget/curl一起工作正常,因此它不是传出防火墙规则等问题.节点请求有什么问题?

https node.js facebook-graph-api

7
推荐指数
1
解决办法
5293
查看次数

swift playground/deinit {}中的内存泄漏并未始终如一地调用

在Swift Playground中,ARC对象删除似乎不一致.这是一个bug还是设计?

考虑这个课程:

class Test {
  var name: String
  init(name:String){
    self.name = name
    println("\(name) initialized")
  }
  deinit{
    println("\(name) deinitialized")
  }
}
Run Code Online (Sandbox Code Playgroud)

当我从操场上调用它时(不是命令行REPL,请参阅下面的注释):

var t1 = Test(name: "t1")
var t2 : Test? = Test(name: "t2")
t2 = nil
Run Code Online (Sandbox Code Playgroud)

我在控制台中只看到初始化消息:

t1 initialized
t2 initialized
Run Code Online (Sandbox Code Playgroud)

缺少的是t2的deinit.

当我在app中运行它(例如app delegate的条目)时,输出与ARC删除一致(即t1 init,然后是t2,t2 deinit然后是t1,因为整个调用块超出了范围):

t1 initialized
t2 initialized
t2 deinitialized
t1 deinitialized
Run Code Online (Sandbox Code Playgroud)

最后,在命令行REPL中(请参阅下面的注释以访问REPL),结果是明确的,即:t1由于其顶级范围而处于活动状态,但是t2被ARC删除,正如人们所期望的那样.

  1> class Test {
  2.       var name: String
  3.       init(name:String){
  4.               self.name = name
  5.               println("\(name) initialized")
  6.       }
  7.       deinit{
  8.               println("\(name) deinitialized") …
Run Code Online (Sandbox Code Playgroud)

ios swift

6
推荐指数
1
解决办法
4785
查看次数

Swift是否有太空船运营商<=>,如果没有,将如何创建自定义运营商?

来自维基百科:

与传统的相等运算符不同,传统的相等运算符将返回true或false,具体取决于参数是相等还是不相等,spaceship运算符将返回1,0或-1,具体取决于左参数相对于right参数的值.如果left参数大于right参数,则运算符返回1.如果left参数小于right参数,则运算符返回-1.如果两个参数相等,则运算符返回0.

宇宙飞船运营商主要用于排序比较.

spaceship-operator swift

2
推荐指数
1
解决办法
1094
查看次数