小编Eri*_*rik的帖子

Swift类内省和泛型

我试图class使用泛型动态创建基于实例的类型,但是我遇到了类内省的困难.

以下是问题:

  • 是否有一个与Obj-C相当的Swift self.class
  • 有没有办法使用AnyClass结果实例化一个类NSClassFromString
  • 有没有办法AnyClass从通用参数中获取或以其他方式严格输入信息T?(类似于C#的typeof(T)语法)

introspection swift

118
推荐指数
5
解决办法
6万
查看次数

NSOperation属性覆盖(isExecuting/isFinished)

NSOperation在Swift中进行子类化,需要覆盖isExecutingisFinished属性,因为我重写了start方法.

我遇到的问题是如何保留键值观察(KVO),同时还能够覆盖这些属性.

通常在Obj-C中,这很容易重新声明属性,就像readwrite在类扩展JSONOperation ()定义中一样.但是,我没有在Swift中看到同样的功能.

例:

class JSONOperation : NSOperation, NSURLConnectionDelegate
{
    var executing : Bool
    {
        get { return super.executing }
        set { super.executing } // ERROR: readonly in the superclass
    }

    // Starts the asynchronous NSURLConnection on the main thread
    override func start()
    {
        self.willChangeValueForKey("isExecuting")
        self.executing = true
        self.didChangeValueForKey("isExecuting")

        NSOperationQueue.mainQueue().addOperationWithBlock(
        {
            self.connection = NSURLConnection(request: self.request, delegate: self, startImmediately: true)
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

所以这是我提出的解决方案,但它感觉非常丑陋和hacky:

var state = Operation() …
Run Code Online (Sandbox Code Playgroud)

macos nsoperation ios swift

24
推荐指数
3
解决办法
7682
查看次数

操作员超载尚不支持?

根据Swift编程指南,操作符重载是允许的,实际上非常通用.但是,我一直无法让它在操场上工作.

例如,Equatable协议想要这样:func ==(lhs:Self, rhs:Self) -> Bool

假设我做了一个简单的Location3D结构:

struct Location3D
{
    var x : Double
    var y : Double
    var z : Double
}
Run Code Online (Sandbox Code Playgroud)

现在我希望这个Location3D实现Equatable协议,所以我将它与此方法一起添加:

func ==(lhs: Self, rhs: Self) -> Bool
{
    return lhs.x == rhs.x &&
           lhs.y == rhs.y &&
           lhs.z == rhs.z
}
Run Code Online (Sandbox Code Playgroud)

我得到运算符的编译错误只允许在全局范围内.咦?

所以我尝试添加@infix到函数中,将函数移动到扩展名,将类型更改为类而不是......一切都无济于事.

我错过了什么吗?您应该如何实施Equtable,Comparable何时运营商似乎无法运作?

operator-overloading swift

18
推荐指数
1
解决办法
5565
查看次数

.NET可移植类库和UDP支持

我正在为飞利浦Hue Lights写一个C#库.我试图在.NET便携式设备中编写基本API包装器,这样我就可以将这个库重用于各种平台,例如Windows 8/RT/WP.API本身使用REST遍布HTTP,因此HttpWebRequest将满足我的大部分需求.

可以使用SSDP over UDP发现控制灯本身的网桥.但是,我无法在便携式类库(PCL)中找到使用UDP套接字的方法.

没有System.Net.Sockets可用的.System.Net命名空间中没有任何内容可以允许它.我已经看到DatagramSocket列出了Windows.Networking.Sockets但在Intellisense中无法看到该命名空间.

有谁知道如何在.NET PCL下获得SSDP的UDP功能?

我真的不想将发现功能与核心库分开.

现在我正在瞄准.NET 4.5 + SL 5 + WP 8 + .NET for Windows Store.我的印象是套接字仍然可用.

.net c# networking udp philips-hue

17
推荐指数
1
解决办法
5496
查看次数

将INSERT或UPDATE另一个表的SQL Server TRIGGER

我有一个名为SQL Server的表Prices,其中包含数万行数据.遗留应用程序大量使用此表,遗憾的是无法修改此表(不能添加,删除或修改列).

我的要求是跟踪表的修改时间(INSERT, UPDATE, or DELETE).但是,该Prices表没有LastUpdated列,我无法添加此列.此外,我的触发器必须与SQL Server 2005兼容.

不过,我可以创建一个额外的表,PricesHistory将存储PriceID,UpdateTypeLastUpdated列.

我想SQL TRIGGERPrices表格中附加一个表格,该表格将在表格中的一行INSERTUPDATE一行中PricesHistory跟踪价格上次更新的时间以及触发它的操作.

这是我到目前为止所做的,它将检测哪个操作导致触发器触发.但是,我很难知道如何SELECT从表格inserteddeleted表格中做出适当INSERT/UPDATEPricesHistory表格.

基本上,所有的操作都应该检查是否PriceID已经在存在PriceHistory表,并UPDATEUpdateTypeLastUpdated列.如果PriceID它还不存在,它应该INSERT和the UpdateTypeLastUpdated值一起使用.

编辑:这是由一位同事的提醒我注意inserteddeleted项目行表.这意味着我可以做一个简单的IF EXISTS ... UPDATE ELSE …

t-sql database sql-server triggers sql-server-2005

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