是否可以声明一个属性是哪个类是' A'或者' B'? (多类可能性)

时间:2016-05-25 07:44:53

标签: ios objective-c types variable-declaration

在Objective-C中,是否可以执行以下操作?

@property (nonatomic, strong) <UIWebView or WKWebView> *webView;

在这种情况下,我知道我可以使用UIView甚至id,但我认为范围太广。

谢谢!

1 个答案:

答案 0 :(得分:0)

是的,但您可以通过类继承执行此操作,并将该属性声明为基类类型,这是您要支持的视图类的超类:

id

可以声明该属性属于任何类型@property (nonatomic, strong) id webView; ),但是在实际使用该实例时需要进行额外的测试,以便避免无法识别的选择器异常

@property (nonatomic, strong) id<WebViewProtocol> webView;

也许最好的选择是声明一个协议来限制任何类型

private static void WebRequest()
    {
        const string WEBSERVICE_URL = "<<Web service URL>>";
        try
        {
            var webRequest = System.Net.WebRequest.Create(WEBSERVICE_URL);
            if (webRequest != null)
            {
                webRequest.Method = "GET";
                webRequest.Timeout = 12000;
                webRequest.ContentType = "application/json";
                webRequest.Headers.Add("Authorization", "Basic dchZ2VudDM6cGFdGVzC5zc3dvmQ=");

                using (System.IO.Stream s = webRequest.GetResponse().GetResponseStream())
                {
                    using (System.IO.StreamReader sr = new System.IO.StreamReader(s))
                    {
                        var jsonResponse = sr.ReadToEnd();
                        Console.WriteLine(String.Format("Response: {0}", jsonResponse));
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
    }