我试图class使用泛型动态创建基于实例的类型,但是我遇到了类内省的困难.
以下是问题:
self.class?AnyClass结果实例化一个类NSClassFromString?AnyClass从通用参数中获取或以其他方式严格输入信息T?(类似于C#的typeof(T)语法)我NSOperation在Swift中进行子类化,需要覆盖isExecuting和isFinished属性,因为我重写了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) 根据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何时运营商似乎无法运作?
我正在为飞利浦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.我的印象是套接字仍然可用.
我有一个名为SQL Server的表Prices,其中包含数万行数据.遗留应用程序大量使用此表,遗憾的是无法修改此表(不能添加,删除或修改列).
我的要求是跟踪表的修改时间(INSERT, UPDATE, or DELETE).但是,该Prices表没有LastUpdated列,我无法添加此列.此外,我的触发器必须与SQL Server 2005兼容.
不过,我可以创建一个额外的表,PricesHistory将存储PriceID,UpdateType和LastUpdated列.
我想SQL TRIGGER在Prices表格中附加一个表格,该表格将在表格中的一行INSERT或UPDATE一行中PricesHistory跟踪价格上次更新的时间以及触发它的操作.
这是我到目前为止所做的,它将检测哪个操作导致触发器触发.但是,我很难知道如何SELECT从表格inserted或deleted表格中做出适当INSERT/UPDATE的PricesHistory表格.
基本上,所有的操作都应该检查是否PriceID已经在存在PriceHistory表,并UPDATE在UpdateType与LastUpdated列.如果PriceID它还不存在,它应该INSERT和the UpdateType和LastUpdated值一起使用.
编辑:这是由一位同事的提醒我注意inserted和deleted项目行不表.这意味着我可以做一个简单的IF EXISTS ... UPDATE ELSE …
swift ×3
.net ×1
c# ×1
database ×1
ios ×1
macos ×1
networking ×1
nsoperation ×1
philips-hue ×1
sql-server ×1
t-sql ×1
triggers ×1
udp ×1