আমি এই কোড স্নিপেটকে সুইফটে রূপান্তর করার চেষ্টা করছি । কিছু অসুবিধার কারণে আমি মাটিতে নামতে লড়াই করছি।
- (BOOL) connectedToNetwork
{
// Create zero addy
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
// Recover reachability flags
SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
SCNetworkReachabilityFlags flags;
BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
CFRelease(defaultRouteReachability);
if (!didRetrieveFlags)
{
return NO;
}
BOOL isReachable = flags & kSCNetworkFlagsReachable;
BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
return (isReachable && !needsConnection) ? YES : NO;
}
আমার প্রথম এবং প্রধান সমস্যাটি হ'ল সি স্ট্রাক্টগুলি কীভাবে সংজ্ঞায়িত করা যায় এবং কীভাবে কাজ করা যায় তা নিয়ে। struct sockaddr_in zeroAddress;
উপরের কোডের প্রথম লাইনে ( ), আমি মনে করি তারা zeroAddress
স্ট্রাক্ট সোকাড্ডার_ইন (?) থেকে ডাকা একটি উদাহরণ সংজ্ঞায়িত করছে , আমি ধরে নিই। আমি এ জাতীয় ঘোষণা করার চেষ্টা করেছি var
।
var zeroAddress = sockaddr_in()
কিন্তু আমি কলটিতে প্যারামিটার 'sin_len' এর জন্য ত্রুটি অনুপস্থিত পেয়েছি যা বোধগম্য কারণ কারণ স্ট্রাক্টটি বেশ কয়েকটি আর্গুমেন্ট নেয়। তাই আবার চেষ্টা করলাম।
var zeroAddress = sockaddr_in(sin_len: sizeof(zeroAddress), sin_family: AF_INET, sin_port: nil, sin_addr: nil, sin_zero: nil)
প্রত্যাশিত হিসাবে আমি তার নিজস্ব প্রাথমিক মানের মধ্যে ভেরিয়েবল ব্যবহার করা কিছু অন্য ত্রুটি পেতে । আমি সেই ত্রুটির কারণও বুঝতে পারি। সি-তে, তারা প্রথমে উদাহরণটি ঘোষণা করে এবং তারপরে পরামিতিগুলি পূরণ করে। আমি জানি যতদূর সুইফটে এটি সম্ভব নয়। সুতরাং আমি সত্যিই কি করতে হবে এই মুহুর্তে হারিয়ে গেছে।
আমি সুইফটে সি এপিআইয়ের সাথে আলাপচারিতার বিষয়ে অ্যাপলের অফিসিয়াল ডকুমেন্টটি পড়েছি তবে স্ট্রাক্টের সাথে কাজ করার কোনও উদাহরণ নেই।
কেউ কি আমাকে এখানে সাহায্য করতে পারেন? আমি সত্যিই এটি প্রশংসা করব।
ধন্যবাদ.
আপডেট: মার্টিনকে ধন্যবাদ আমি প্রাথমিক সমস্যার মধ্য দিয়ে যেতে পেরেছি। তবে তবুও সুইফট আমার পক্ষে সহজ করে দিচ্ছে না। আমি একাধিক নতুন ত্রুটি পাচ্ছি।
func connectedToNetwork() -> Bool {
var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
var defaultRouteReachability: SCNetworkReachabilityRef = SCNetworkReachabilityCreateWithAddress(UnsafePointer<Void>, UnsafePointer<zeroAddress>) // 'zeroAddress' is not a type
var flags = SCNetworkReachabilityFlags()
let didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, UnsafeMutablePointer<flags>) // 'flags' is not a type
defaultRouteReachability.dealloc(1) // 'SCNetworkReachabilityRef' does not have a member named 'dealloc'
if didRetrieveFlags == false {
return false
}
let isReachable: Bool = flags & kSCNetworkFlagsReachable // Cannot invoke '&' with an argument list of type '(@lvalue UInt32, Int)'
let needsConnection: Bool = flags & kSCNetworkFlagsConnectionRequired // Cannot invoke '&' with an argument list of type '(@lvalue UInt32, Int)'
return (isReachable && !needsConnection) ? true : false
}
সম্পাদনা 1: ঠিক আছে আমি এই লাইনটি এখানে পরিবর্তন করেছি,
var defaultRouteReachability: SCNetworkReachabilityRef = SCNetworkReachabilityCreateWithAddress(UnsafePointer<Void>(), &zeroAddress)
আমি এই লাইনে যে নতুন ত্রুটিটি পাচ্ছি তা হ'ল 'অনিরাপদ পয়েন্টার' 'সিএফএল্লোকেটর' তে রূপান্তরিত নয় । আপনি NULL
সুইফটে কিভাবে পাস করবেন ?
এছাড়াও আমি এই লাইনটি পরিবর্তন করেছি এবং ত্রুটিটি এখন চলে গেছে।
let didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags)
সম্পাদনা 2: এই প্রশ্নটি nil
দেখে আমি এই লাইনে পাস করেছি । কিন্তু সেই উত্তরটি এখানে উত্তরটির সাথে বৈপরীত্য । এটি বলেছে সুইফটে এর সমতুল্য নেই ।NULL
var defaultRouteReachability: SCNetworkReachabilityRef = SCNetworkReachabilityCreateWithAddress(nil, &zeroAddress)
যাইহোক আমি একটি নতুন ত্রুটি পেয়েছি 'sockaddr_in' উপরের লাইনে 'sockaddr' এর মত নয় ।